如何将组件用作单元格内容,而不仅仅是字符串,布尔值和整数。
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,但我不知道如何。
答案 0 :(得分:2)
阅读JTable tutorial。了解您已经在JTable单元格中使用了类的组件。显示时,JTable 呈现一个TableCellRenderer,一个必须返回每个单元格显示的Component的对象。当编辑单元格时,JTable将显示(通常)不同的对象,即由TableCellEditor生成的组件。那么你的工作就是改变你的表格的渲染器和/或编辑器,这取决于你的需要,其步骤太长而不能简单地在这个答案中显示。再次,教程将为您指明方向。
请注意,无论您在解决方案中采用何种路线,JTable的单元格渲染器都不会显示任何实际组件,而只会显示组件的渲染,这是一个很大的区别。然而,单元格编辑器将显示实际组件,但仅在单元格处于编辑状态时才会显示。
除此之外,该表用作数据的表格式表示,通常,每列中都显示相同的类型数据,因此您&# 39; d必须提出一个强有力的论据来说服我有一个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));