JTable Column默认使用Load.Now上的数据值,我需要在同一列上使用组合框,并且已经选择了该默认值

时间:2013-08-27 10:46:58

标签: java swing jtable jcombobox

我有一个要求,我得到一个JTable列默认使用Load上的某些数据。 现在,我需要在同一列上使用一个组合框,并在表格中该列的组合框中选择了该默认值+其他几个选项来选择或更改该列单元格的值。

2 个答案:

答案 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想要更改,用户现在可以选择从组合框中选择另一个值来覆盖默认值。