我有一个要求,我得到一个JTable列默认使用Load上的某些数据。 现在,我需要在同一列上使用一个组合框,并在表格中该列的组合框中选择了该默认值+其他几个选项来选择或更改该列单元格的值。
答案 0 :(得分: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();
}
}
我希望这能解决你的问题。
答案 1 :(得分:0)
让我用上面的例子清楚地解释。
JTable table = new JTable(new Object [] [] {{“Paul J”,“20”},{“Jerry M”,“30”},{“Simon K”,“25”}}, new String [] {“Name”,“Age”});
以上是最初要加载到表中的数据。 其中列为名称,年龄和值分别为
现在,我需要的是'Age'列将是一个组合框,而Table中的'Paul J'默认将'Age'填充为20,并且comboBox应出现在此列中,而User Now想要更改,用户现在可以选择从组合框中选择另一个值来覆盖默认值。