0

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

4

2 回答 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 回答