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)是屏幕上的表不是您添加断点的表。。。