Java 禁用后仍可以从JComboBox中选择

Java 禁用后仍可以从JComboBox中选择,java,swing,jcombobox,tablecellrenderer,Java,Swing,Jcombobox,Tablecellrenderer,我在设置JComboBox时遇到问题。在separte面板上为用户提供了一些选项,用于确定是否应启用/禁用JComboBox-我的问题是,即使禁用了JComboBox,用户仍然可以从中进行选择(组合框变灰时禁用)!JComboBox使用自定义TableCellRenderer和自定义DefaultCellEditor。JComboBox也是JTable行中的一个单元格/列 下面是代码的细目: *JTable的编制人* *设置组合框* public void setupUserCombo(){

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

下面是代码的细目:

*JTable的编制人*

*设置组合框*

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

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

    public MyComboBoxEditor(String[] items) {
        super(new JComboBox(items));
    }
}
任何关于我做错了什么的指点都将不胜感激

谢谢,

  • 了解

  • 不要将
    JComponents
    存储在
    XxxTableModel
    中,那么
    JComboBox
    中最后选择的值将作为
    XxxTableModel
    字符串值存储在

      • 了解

      • 不要将
        JComponents
        存储在
        XxxTableModel
        中,那么
        JComboBox
        中最后选择的值将作为
        XxxTableModel
        字符串值存储在


      如果要禁用表中单元格的编辑,应覆盖


      在这里,您所做的只是渲染一个禁用的JComboBox,但这并不阻止编辑,它只是渲染一个禁用的JComboBox。另请参见

      如果要禁用表格中单元格的编辑,则应覆盖


      在这里,您所做的只是渲染一个禁用的JComboBox,但这并不阻止编辑,它只是渲染一个禁用的JComboBox。另请参见

      非常好-感谢您的帮助!问题是我已经在重写模型中的方法,以便在选择组合框时始终返回true。现在修复为仅在启用时返回true。非常好-感谢您的帮助!问题是我已经在重写模型中的方法,以便在选择组合框时始终返回true。现在已修复为仅在其启用时返回true。
          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;
          }
      
      }
      
          public class MyComboBoxEditor extends DefaultCellEditor {
              private static final long serialVersionUID = 1L;
      
          public MyComboBoxEditor(String[] items) {
              super(new JComboBox(items));
          }
      }