Java 使用JCheckBox作为我的JTable';s细胞

Java 使用JCheckBox作为我的JTable';s细胞,java,swing,jtable,Java,Swing,Jtable,我正在使用此函数创建一个jTable,其中一些特殊的单元格有一个jComboBox作为编辑器: void fillTable_(){ final JComboBox myEditor = new JComboBox(new String[] {"yes", "no", "maybe"}); String[][] data = new String[10][2]; data[0][0] = "0,0"; data[0]

我正在使用此函数创建一个
jTable
,其中一些特殊的单元格有一个
jComboBox
作为编辑器:

void fillTable_(){
        final JComboBox myEditor = new JComboBox(new String[] {"yes", "no", "maybe"});
        String[][] data = new String[10][2];
            data[0][0] = "0,0";
            data[0][1] = "0,1";
            data[1][0] = "1,0";
            data[1][1] = "1,1";
            data[2][0] = "2,0";
            data[2][1] = "2,1";
            String[] columnNames = {"Nom", "Valeur"};
            DefaultTableModel model = new DefaultTableModel(data, columnNames);
            jTable1 = new JTable(model){
                DefaultCellEditor myCellEditor = new DefaultCellEditor(myEditor);
                @Override
                public TableCellEditor getCellEditor(int row, int column){
                    int modelColumn = convertColumnIndexToModel(column);
                    int modelRow = convertRowIndexToModel(row);
                    if(modelColumn == 1 && modelRow == 1){
                        return myCellEditor;
                    } else {
                        return super.getCellEditor(row, column);
                    }
                }
            };
    }
但是jTable保持为空,甚至不显示纯文本。有什么不对劲吗?

1)创建,然后按照官方教程将其组合在一起

2) 对于布尔组件,默认情况下不需要创建自己的JTable 表单元格中支持字符串、整数、双精度、布尔值、日期和

a.m.的另一个例子,来自本论坛,和

1)创建,然后按照官方教程将其放在一起

2) 对于布尔组件,默认情况下不需要创建自己的JTable 表单元格中支持字符串、整数、双精度、布尔值、日期和

a.m.的另一个例子,来自本论坛,以及

但是
JTable
保持为空;甚至不显示纯文本

您需要一个与编辑器相对应的呈现器,如本文所建议的,它包含
ValueRenderer
ValueEditor

我只需要在
JTable
的一些单元格中放置一个
JComboBox

如中所述,“单个单元格渲染器通常用于绘制包含相同类型数据的所有单元格。”

我同时指定了行和列,但什么也没有发生

当我将新的
JTable
添加到容器中时,您的代码似乎正常工作

import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;

/** @see http://stackoverflow.com/questions/7200500 */
public class TableTest extends JPanel {

    public TableTest() {
        this.setPreferredSize(new Dimension(320, 240));
        final JComboBox myEditor = new JComboBox(
            new String[]{"yes", "no", "maybe"});
        String[][] data = new String[10][4];
        data[0][0] = "0,0";
        data[0][5] = "0,1";
        data[1][0] = "1,0";
        data[1][6] = "1,1";
        data[2][0] = "2,0";
        data[2][7] = "2,1";
        String[] columnNames = {"Nom", "Valeur"};
        DefaultTableModel model = new DefaultTableModel(data, columnNames);
        JTable table = new JTable(model) {

            DefaultCellEditor myCellEditor = new DefaultCellEditor(myEditor);

            @Override
            public TableCellEditor getCellEditor(int row, int column) {
                int modelColumn = convertColumnIndexToModel(column);
                int modelRow = convertRowIndexToModel(row);
                if (modelColumn == 1 && modelRow == 1) {
                    return myCellEditor;
                } else {
                    return super.getCellEditor(row, column);
                }
            }
        };
        this.add(table);
    }

    private void display() {
        JFrame f = new JFrame("TableTest");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(this);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new TableTest().display();
            }
        });
    }
}

但是
JTable
保持为空;甚至不显示纯文本

您需要一个与编辑器相对应的呈现器,如本文所建议的,它包含
ValueRenderer
ValueEditor

我只需要在
JTable
的一些单元格中放置一个
JComboBox

如中所述,“单个单元格渲染器通常用于绘制包含相同类型数据的所有单元格。”

我同时指定了行和列,但什么也没有发生

当我将新的
JTable
添加到容器中时,您的代码似乎正常工作

import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;

/** @see http://stackoverflow.com/questions/7200500 */
public class TableTest extends JPanel {

    public TableTest() {
        this.setPreferredSize(new Dimension(320, 240));
        final JComboBox myEditor = new JComboBox(
            new String[]{"yes", "no", "maybe"});
        String[][] data = new String[10][4];
        data[0][0] = "0,0";
        data[0][5] = "0,1";
        data[1][0] = "1,0";
        data[1][6] = "1,1";
        data[2][0] = "2,0";
        data[2][7] = "2,1";
        String[] columnNames = {"Nom", "Valeur"};
        DefaultTableModel model = new DefaultTableModel(data, columnNames);
        JTable table = new JTable(model) {

            DefaultCellEditor myCellEditor = new DefaultCellEditor(myEditor);

            @Override
            public TableCellEditor getCellEditor(int row, int column) {
                int modelColumn = convertColumnIndexToModel(column);
                int modelRow = convertRowIndexToModel(row);
                if (modelColumn == 1 && modelRow == 1) {
                    return myCellEditor;
                } else {
                    return super.getCellEditor(row, column);
                }
            }
        };
        this.add(table);
    }

    private void display() {
        JFrame f = new JFrame("TableTest");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(this);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new TableTest().display();
            }
        });
    }
}


而且也没有捕获到异常<代码>jTable1可能是GUI编辑器的问题。而且也没有捕获到任何异常
jTable1
可能是GUI编辑器的问题。在所有这些示例中,编辑器是为整个列设置的,但在我的例子中,我只想为某些单元格将编辑器更改为
jComboBox
“我只想为某些单元格将编辑器更改为
jComboBox
。”您可以使用
参数来决定返回哪个组件。@trashgood:这正是我所做的;我同时指定了行和列,但什么都没有发生,表总是空的!在所有这些示例中,编辑器是为整个列设置的,但在我的示例中,我只想为某些单元格将编辑器更改为
jComboBox
“我只想为某些单元格将编辑器更改为
jComboBox
。”您可以使用
参数来决定返回哪个组件。@trashgood:这正是我所做的;我同时指定了行和列,但什么都没有发生,表总是空的!事实上,该表已经在一个
JSplitPane
中,并且在突出显示一些
JTree
节点时显示了它们的适当性。纯文本显示还可以,但不是因为我添加了
CellEditor
,所以表格必须已经在容器中了,因为它是可见的;我已经在上面详细说明了。这不起作用,我只是添加了
System.out.println(“仅用于测试”)
intmodelRow=convertRowIndexToModel(行)下行,但没有显示任何内容!你得到的正是我想要的want@Mano War我的猜测(这只是一个猜测,因为您没有显示sscce)是屏幕上的表不是您添加断点的表…事实上,该表已经在
JSplitPane
中,并且在突出显示某些
JTree
节点时显示它们的属性。纯文本显示还可以,但不是因为我添加了
CellEditor
,所以表格必须已经在容器中了,因为它是可见的;我已经在上面详细说明了。这不起作用,我只是添加了
System.out.println(“仅用于测试”)
intmodelRow=convertRowIndexToModel(行)下行,但没有显示任何内容!你得到的正是我想要的want@Mano War我的猜测(这只是一个猜测,因为您没有显示sscce)是屏幕上的表不是您添加断点的表。。。