1

JComboBox の設定に問題があります。ユーザーには、JComboBox を有効/無効にするかどうかを決定する別のパネルでいくつかのオプションが与えられます。 )!JComboBox はカスタム TableCellRenderer とカスタム DefaultCellEditor を使用します。また、JComboBox は JTable の行のセル/列です。

コードの内訳は次のとおりです。

* JTable の prepareRenderer *

public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
    JComponent component = (JComponent) super.prepareRenderer(renderer, row, column);
       //Code which checks to see if component should be enabled
       enableComponent = false;
       component.setEnabled(enableComponent);
    }

*コンボボックスを設定*

public void setupUserCombo(){

       TableColumn col = getColumnModel().getColumn(0);
           List<String> comboUsers = new String["Adam", "Ben"]

    MyComboBoxRenderer jComboBox = (new MyComboBoxRenderer((String[])values.toArray(comboUsers ));
    col.setCellEditor(new MyComboBoxEditor((String[])values.toArray(new String[0])));
    col.setCellRenderer(jComboBox);

    repaint();
}

*TableCellRenderer*

    public class MyComboBoxRenderer extends JComboBox implements TableCellRenderer {
    private static final long serialVersionUID = 1L;

    public MyComboBoxRenderer(String[] items) {
        super(items);
        repaint();
    }

    public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column) {
        setSelectedItem("");

        if (isSelected) {
            super.setBackground(table.getSelectionBackground());
        } else {
            setForeground(table.getForeground());
            setBackground(table.getBackground());
        }

        setSelectedItem(value);

        return this;
    }

}

*DefaultCellEditor*

    public class MyComboBoxEditor extends DefaultCellEditor {
        private static final long serialVersionUID = 1L;

    public MyComboBoxEditor(String[] items) {
        super(new JComboBox(items));
    }
}

私が間違っていることについての指針は大歓迎です!!

ありがとう、

4

2 に答える 2

2
于 2012-10-30T11:21:41.673 に答える
2

テーブル内のセルの編集を無効にする場合は、オーバーライドする必要がありますTableModel.isCellEditable(int,int)

ここで行っているのは、無効な JComboBox をレンダリングすることだけですが、これは編集を妨げるものではなく、無効な JComboBox をレンダリングするだけです。http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#editrenderも参照してください。

于 2012-10-30T11:24:30.633 に答える