如何能够将组件也用作单元格内容,而不仅仅是字符串、布尔值和整数。
String[] petStrings = { "Bird", "Cat", "Dog", "Rabbit", "Pig" };
String[] columnNames = {"name", "elem"};
Object[][] data = {
{"button", new JButton("test")},
{"select", new JComboBox(petStrings)}
};
JTable table = new JTable(data, columnNames);
现在我看不到按钮,也看不到桌子上的组合框,只有javax.swing.JComboBox...
也许我应该以某种方式扩展JTable,但我不知道如何扩展。
发布于 2014-09-20 04:20:25
读JTable教程。要知道,您已经在JTable单元格中使用某种组件。当显示时,JTable将呈现一个TableCellRenderer,该对象必须返回每个单元格显示的组件。当一个单元格被编辑时,JTable将显示一个(通常)不同的对象,一个由theTableCellEditor生成的组件。然后,您的工作是根据您的需要更改表的呈现器和编辑器,其步骤太长,无法在此答案中简单显示。同样,这些教程将为您指明方向。
请注意,无论您在解决方案中采用何种路径,JTable的单元呈现器都不会显示任何实际组件,而是只显示组件的呈现,这是一个很大的区别。然而,单元格编辑器将显示一个实际的组件,但只有在单元格被编辑时才会显示。
第二,表被用作数据的表格表示形式,通常是,在每一列中都显示相同类型的数据,因此您必须提出一个强有力的论据,以说服我有时使用单个JTable列显示JButton,有时显示JComboBox。
例如,要让一个JTable列的编辑器显示组合框,可以将其默认单元格编辑器设置为使用组合框,如下所示:
String[] petStrings = { "Bird", "Cat", "Dog", "Rabbit", "Pig" };
JComboBox<String> petCombo = new JComboBox<>(petStrings);
String[] columnNames = {"name", "elem"};
Object[][] data = {
{"Pet 1", null},
{"Pet 2", null}
};
DefaultTableModel model = new DefaultTableModel(data, columnNames);
JTable table = new JTable(model);
table.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(petCombo));
https://stackoverflow.com/questions/25948659
复制相似问题