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

如何使JTable列中只有一个复选框可选

莘欣怿
2023-03-14

我正在使用DefaultTableModel,如下所示:

  DefaultTableModel model = new DefaultTableModel (COLUMNS, 0 )
  {
      @Override
      public boolean isCellEditable(int row, int column)
      {
          return (getColumnName(column).equals("Selected"));
      }

      public Class getColumnClass(int columnIndex)
      {
          if(getColumnName(columnIndex).equals("Selected"))
              return Boolean.class;
          return super.getColumnClass(columnIndex);
      }     
  };

现在我想在“Selected”列中仅使一个复选框可选。这怎么能做到。我也试过下面的方法,但它不起作用。

 public void fireTableCellUpdated(int row,int column)
 {
     if(getColumnName(column).equals("Selected"))
     {
         for(int i = 0; i<getRowCount() && i!=row;i++)
            setValueAt(Boolean.FALSE, row, column);
     }
 }

共有1个答案

黄昊
2023-03-14

>

  • @EatSleepCode编写了@Mkorbel,请给出实现setValueAt方法的示例代码。

    (OP已使用)DefaultTableModel的代码,

    对于基于AbstractTableModel的代码,需要保留通知程序FireTableCellUpdated(rowIndex,columnIndex)的代码排序,因为/否则在JTables视图中不会重新绘制任何内容,

    这两个模型和它的通知程序之间有一些重要的区别,而且(我的观点)没有理由为基本的东西(99pct的表模型)而烦恼和使用abstracttablemodel

    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.SwingUtilities;
    import javax.swing.table.DefaultTableModel;
    
    public class TableRolloverDemo {
    
        private JFrame frame = new JFrame("TableRolloverDemo");
        private JTable table = new JTable();
        private String[] columnNames = new String[]{"Column"};
        private Object[][] data = new Object[][]{{false}, {false}, {true}, {true},
            {false}, {false}, {true}, {true}, {false}, {false}, {true}, {true}};
    
        public TableRolloverDemo() {
            final DefaultTableModel model = new DefaultTableModel(data, columnNames) {
                private boolean ImInLoop = false;
    
                @Override
                public Class<?> getColumnClass(int columnIndex) {
                    return Boolean.class;
                }
    
                @Override
                public boolean isCellEditable(int rowIndex, int columnIndex) {
                    return true;
                }
    
                @Override
                public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
                    if (columnIndex == 0) {
                        if (!ImInLoop) {
                            ImInLoop = true;
                            Boolean bol = (Boolean) aValue;
                            super.setValueAt(aValue, rowIndex, columnIndex);
                            for (int i = 0; i < this.getRowCount(); i++) {
                                if (i != rowIndex) {
                                    super.setValueAt(!bol, i, columnIndex);
                                }
                            }
                            ImInLoop = false;
                        }
                    } else {
                        super.setValueAt(aValue, rowIndex, columnIndex);
                    }
                }
            };
            table.setModel(model);
            table.setPreferredScrollableViewportSize(table.getPreferredSize());
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(new JScrollPane(table));
            frame.pack();
            frame.setLocationByPlatform(true);
            frame.setVisible(true);
        }
    
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    TableRolloverDemo tableRolloverDemo = new TableRolloverDemo();
                }
            });
        }
    }
    

  •  类似资料:
    • 问题内容: 我不知道该怎么办,我有这个框架,我想填充一个JTable并添加一个复选框。 问题答案: 我假设您是要添加数据库中未包含的其他列的复选框,以便可以选择行? 如果是这样,则可以使用包装器TableModel。 以下示例可能会有所帮助: 如果该模型有效,那么您可以使用以下代码为我们提供模型:

    • 这个类创建一个有6列的jtable,最后一列包含布尔复选框。我在getColumnClass中指定了它。我不能取消选中/选中这些框,它们是不可编辑的。我怀疑MyTableModel类中的setValueAt和getValueAt方法不正确,但我无法理解。请帮帮忙。这里有3个我要展示的类:带有main方法的gui类,扩展AbstractTableModel的MyTableModel和cell ren

    • 我正在将一些代码移动到java8,试图(有时强迫自己)使用流和lambdas,但我对它们还不舒服。 我在类中有一些验证业务对象的方法。每个方法看起来都像 Fail是以某种方式描述错误的枚举,如果没有错误,则方法返回Optional.empty()。我不需要收集所有错误,但返回第一个错误,而无需执行以下验证。 我现在做的是 它工作,它完成任务,它不执行不必要的方法,它清晰易读(如果可选,它会更清晰。

    • 我一直在研究这个问题,但我找不到一个带有复选框的get drawable的解决方案。我试图做的是,当你点击这个特定的复选框时,它会过滤相应颜色的复选框。顺便说一下,这是一个片段。所以,我有可以是红色、黄色或绿色的复选框。如果用户点击它们,它会改变颜色。例如,我有一个黄色的复选框,它是chkProgress,当它被单击时,我想找到所有黄色的复选框,并筛选黄色的复选框。所以,我有可绘制的ID,我需要得

    • 我有一个自定义复选框。我想要的是在选中复选框时打开一个引导模式。我想要一个引导模式打开就像点击一个按钮一样。希望你能理解我的问题。我怎么能做到。

    • 我正在使用React、GraphQL、Apollo创建多个可选复选框。 如果选中,我想进行查询,插入查询和取消选中,删除查询(我只想为选中/删除的项目生成查询) 现在我正在使用变异技术,但我有一个问题,所有的东西都被删除,然后被插入。 我只想为选定/删除的项目生成查询。如何修复它? 我的代码如下。 const handleCollection=(名称:string,arr:Array)= 突变更新