我有一个问题,任何人都可以帮助我。这是我的JTable
,其中呈现的一列在其单元格中有一个组合框。这是我的表中的问题:当我单击组合框时它不会弹出。当我打印table.getValueAt(row,column)
时,它将返回单元格的prev数据而不是组合框中的数据,并且它不会显示允许用户选择的组合框。
JTable
的代码:
public void setUpSportColumn(JTable table, TableColumn sportColumn) {
// Set up the editor for the sport cells.
JComboBox<String> comboBox = new JComboBox<String>();
DefaultComboBoxModel<String> model = new DefaultComboBoxModel<String>();
model.addElement("Snowboarding");
model.addElement("Rowing");
model.addElement("Knitting");
model.addElement("Speed reading");
model.addElement("Pool");
model.addElement("None of the above");
comboBox.setModel(model);
sportColumn.setCellEditor(new DefaultCellEditor(comboBox));
ComboBoxTableCellRenderer renderer = new ComboBoxTableCellRenderer();
renderer.setModel(model);
sportColumn.setCellRenderer(renderer);
}
答案 0 :(得分:1)
TableRenderDemo
是一个完整的工作示例,如下所述。
要查看编辑器更新TableModel
,请在MyTableModel
中启用调试。
private boolean DEBUG = true;
结果将显示在控制台上:
$ java TableRenderDemo
Setting value at 0,2 to None of the above (an instance of class java.lang.String)
New value of data:
row 0: Mary Campione None of the above 5 false
row 1: Alison Huml Rowing 3 true
row 2: Kathy Walrath Knitting 2 false
row 3: Sharon Zakhour Speed reading 20 true
row 4: Philip Milne Pool 10 false
使用here所示的方法之一让表格编辑器具有普通JComboBox
的设计;上面说明了使用UIManager
图标的已接受answer。
sportColumn.setCellRenderer(new DefaultTableCellRenderer(){
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
JLabel label = (JLabel) super.getTableCellRendererComponent(table,
value, isSelected, hasFocus, row, column);
label.setIcon(UIManager.getIcon("Table.descendingSortIcon"));
return label;
}
});