【问题标题】:Can still select from JComboBox after being disabled禁用后仍然可以从 JComboBox 中选择
【发布时间】:2012-10-19 17:10:32
【问题描述】:

我在设置 JComboBox 时遇到问题。在单独的面板上为用户提供了一些选项,这些选项确定是否应该启用/禁用 JComboBox - 我遇到的问题是,即使在 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));
    }
}

任何关于我做错了什么的指针将不胜感激!

谢谢,

【问题讨论】:

    标签: java swing jcombobox tablecellrenderer


    【解决方案1】:

    如果您想禁用表格中单元格的编辑,您应该覆盖TableModel.isCellEditable(int,int)

    这里你所做的只是渲染一个禁用的 JComboBox,但这不会阻止编辑,它只是渲染一个禁用的 JComboBox。另见http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#editrender

    【讨论】:

    • 非常好 - 感谢您的帮助!问题是我已经在模型中覆盖了该方法,以便在选择组合框时始终返回 true。现在固定为仅在启用时才返回 true。
    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-20
      • 2015-12-24
      • 1970-01-01
      • 1970-01-01
      • 2019-02-08
      • 1970-01-01
      • 2015-08-02
      相关资源
      最近更新 更多