【问题标题】:Why is a boolean value in JTable showing as true/false instead of a checkbox?为什么 JTable 中的布尔值显示为真/假而不是复选框?
【发布时间】:2012-01-07 00:52:54
【问题描述】:

新的布尔值不应该显示为复选框吗?它改为显示为真/假字符串值。这就是我填充数据的方式:

    Object[] columnNames4 = {"Name", "City", "Checkbox"};
    Object[][] data = {
    {"john smith",
     "x", new Boolean(false)},
    {"jenny m",
     "y", new Boolean(false)}
     };
    JTable table4 = new JTable(data, columnNames4);
    JScrollPane S3 = new JScrollPane(table4);
    S3.setPreferredSize(new Dimension(300, 300));

【问题讨论】:

  • 你找到解决办法了吗?
  • not yet :\ 在复选框列下的值为“false,true etc..” 没有复选框
  • 你试过用 DefaultTableModel 代替吗?

标签: java jtable jcheckbox


【解决方案1】:

创建AbstractTableModel 的子类,并在方法 getColumnClass() 中为您想要的列返回 Boolean.class。

【讨论】:

    【解决方案2】:

    您需要设置 TableCellRenderer 和 TableCellEditor

    http://docs.oracle.com/javase/tutorial/uiswing/components/table.html

    一旦你定义了渲染器/编辑器,你就可以

    • 将渲染/编辑器定义为类型的默认渲染 table.setDefaultRenderer(Boolean.class, new MyBooleanRender()); table.setDefaultEditor(Boolean.class, new MyBooleanCellEditor());

    • 将渲染/编辑器定义为列 TableColumnModel tcm = table.getColumnModel(); tcm.getColumn(4).setCellRenderer(new MyBooleanRender()); tcm.getColumn(4).setCellEditor(new MyBooleanCellEditor());


    • 你可以定义一个复选框 cellRender 像:

      public class MyBooleanRender extends JCheckBox
      implements TableCellRenderer {
      
      private JCheckBox checkBox = this;
      
      /**
       * @see javax.swing.table.TableCellRenderer#getTableCellRendererComponent
       * (javax.swing.JTable, java.lang.Object, boolean, boolean, int, int)
       */
      public Component getTableCellRendererComponent(
          JTable tbl,
          Object value,
          boolean isSelected,
          boolean hasFocus,
          int row,
          int column) {
          boolean val = false;
      
          if (Common.isEmpty(value)) {
              checkBox.setSelected(false);
          } else {
      
              try {
                  val = ((Boolean) value).booleanValue();
              } catch (Exception e) {
              }
              checkBox.setSelected(val);
          }  
      
          if (Common.OPTIONS.highlightEmpty.isSelected() && value == Common.MISSING_VALUE) {
              checkBox.setBackground(Common.EMPTY_COLOR);
          } else if (value == Common.MISSING_REQUIRED_VALUE) {
              checkBox.setBackground(Common.MISSING_COLOR);
          } else {
              ...
          }
      
          checkBox.setSelected(val);
          return checkBox;
      }
      }
      
    • 对于 checkboxEditor,您可以使用 DefaultCellEditor 类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多