当前位置: 首页 > 知识库问答 >
问题:

禁用后仍可以从JComboBox中选择

轩辕经赋
2023-03-14

我在设置JComboBox时遇到问题。用户在separte面板上有几个选项,这些选项决定是否应该启用/禁用JComboBox——我的问题是,即使禁用了JComboBox,用户仍然可以从中进行选择(当组合框变灰时,它被禁用)!JComboBox使用自定义TableCellRenderer和自定义DefaultCellEditor。JComboBox也是JTable中一行的单元格/列。

下面是代码的细分:

*JTable的编制者*

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();
}

*TableCellRenader*

    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));
    }
}

任何关于我做错了什么的建议都将不胜感激!!

谢谢,

共有2个答案

夹谷信鸿
2023-03-14

>

  • 请参阅JTable教程,了解如何使用组合框作为编辑器

    @aterai查看

    不存储JComponentsXxxTableModel中,然后从JComboBox中最后选择的值存储在XxxTableModel中,作为String value

  • 邹毅
    2023-03-14

    如果要禁用表中单元格的编辑,应覆盖TableModel。iCelleditable(int,int)

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

     类似资料:
    • 这是一个相当普遍的问题,我用过的解决方案和我后来搜索发现的差不多。其中一个实现了带有< code>JLabel的< code>ListCellRenderer,它根据当前选择的索引启用或禁用自身: 问题是,尽管列表项在视觉上显示为禁用,但尽管调用了< code>setFocusable,它仍然可以被选中。我该如何禁用它?

    • 我正在使用SpringBoot和@JmsListener从同一个QManager中的多个队列中检索IBM MQ消息。到目前为止,我可以得到没有任何问题的消息。但也有可能出现这样的情况,我不得不暂时停止使用其中一个队列中的MSG。它不一定是动态的。 我没有使用任何自定义ConnectionFactory方法。需要时,我想在application.properties中进行配置更改,以禁用特定的队列消

    • 1.我创建了一个JComboBox和Jtable。当用户从JComboBox中选择项目时,它们被添加到Jtable中 2.我不想让用户选择他以前在JComboBox中选择的项目 3.因此必须禁用选定的选项(不可选择)。我该怎么做?4.下面的代码在添加到JTable中后从JComboBox中删除该选定项,但我有兴趣禁用它

    • 我有一个,其中有8个项目,我想显示其中的所有项目,但在特定条件下,用户只能选择前两个项目,因此我编写了程序,如果条件为真,用户选择任何其他选项,则会显示一个消息框,显示然后自动选择默认值。到现在为止,一直都还不错。 但现在的问题是,用户无法通过查看的选项来判断他可以选择哪些选项,因此我想做的是,如果条件为真,那么除前两个选项之外的所有选项都应该被禁用(或灰显或其他),这样用户就可以判断出您无法选择

    • 单击“删除”按钮时显示自定义弹出。单击“删除”按钮时禁用。当用户点击“确定”或“取消”按钮时,“删除”按钮将在删除操作后启用。当点击对话框中的X按钮时,对话框会立即关闭,但删除按钮仍处于禁用状态。下面是我的代码 用于自定义弹出的代码

    • 问题内容: 我想制作一个JComboBox,它具有用于项目而不是文本的复选框。此外,应该可以检查多个项目并从组件中检索选定的项目。我应该做一个自定义的ComboBoxUI,ComboBoxEditor,ListCellRenderer,ComboPopUp还是其他完全不同的东西?是否有一个现有的Java控件可以做到这一点? 问题答案: 这相当容易实现。在这里找到链接文本