我有一个要求,其中我有一个 JTable 列默认加载某些数据。现在,我需要在同一列上的组合框,该默认值已经在表中该列的组合框中选择了+几个其他选项来选择或更改该列的单元格的值。
问问题
1597 次
2 回答
0
这是示例代码:
public class Test extends JFrame {
public void init() {
JTable table = new JTable( new Object[][] { { "Paul J" , "20" }, { "Jerry M" , "30" }, { "Simon K" , "25" } },
new String[] { "Name" , "Age" } );
table.getColumnModel().getColumn(1).setCellEditor( new SampleCellEditor() );
getContentPane().add( new JScrollPane( table ));
setSize( 400, 200 );
setVisible(true);
}
// Sample Editor to Show Combobox with all sample values in that column
// also can edit the value to add new Value that is not in the column
public static class SampleCellEditor extends DefaultCellEditor {
public SampleCellEditor( ) {
super( new JComboBox() );
}
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected,
int row, int column) {
JComboBox combo = ( JComboBox ) editorComponent;
combo.setEditable(true); // make editable so that we can add new values
combo.removeAllItems(); // remove All pre-existing values.
Vector<Object> objectList = new Vector<Object>();
Object obj = null;
for( int i = 0; i < table.getRowCount(); i++ ) {
obj = table.getValueAt( i, column );
if( !objectList.contains( obj ) )
objectList.add( obj );
}
combo.setModel( new DefaultComboBoxModel(objectList) );
return super.getTableCellEditorComponent(table, value, isSelected, row, column);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Test t = new Test();
t.init();
}
}
我希望这能解决你的问题。
于 2013-08-27T12:54:21.773 回答
0
让我用上面的例子清楚地解释一下。
JTable table = new JTable( new Object[][] { { "Paul J" , "20" }, { "Jerry M" , "30" }, { "Simon K" , "25" } }, new String[ ] { “姓名年龄” } );
以上是最初要加载到表中的数据。其中列作为名称和年龄和值分别。
现在,我需要的是 'Age' 列将是一个组合框,对于表中的 'Paul J',默认情况下将 'Age' 填充为 20,并且组合框应该出现在此列中并且用户现在想要更改,用户现在将可以选择从组合框中选择另一个值以覆盖默认值。
于 2013-08-28T04:02:21.577 回答