2015-01-10 71 views
1

不应该将新布尔显示为复选框吗?它显示为真/假字符串值。这就是我如何填充数据:为什么JTable中的布尔值显示为true/false而不是复选框?

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)); 
+0

你找到了解决办法? –

+0

尚未:\ 下的复选框列的值是“假,真等..”没有复选框 – user7

+0

你有没有尝试使用DefaultTableModel呢? –

回答

0

你需要安装一个的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类。

相关问题