为什么 JTable 中的布尔值显示为 true/false 而不是复选框?

发布于 2024-12-17 22:32:03 字数 407 浏览 2 评论 0原文

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

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

Shouldn't the new Boolean appear as a checkbox? It's showing up as a true/false string value instead. This is how I'm populating the data:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

感情旳空白 2024-12-24 22:32:03

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

Create a subclass ofAbstractTableModel and return Boolean.class in the Method getColumnClass() for the column you want.

∝单色的世界 2024-12-24 22:32:03

您需要设置 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,如下所示:

    公共类 MyBooleanRender 扩展了 JCheckBox
    实现 TableCellRenderer {
    
    私有 JCheckBox 复选框 = this;
    
    /**
     * @see javax.swing.table.TableCellRenderer#getTableCellRendererComponent
     *(javax.swing.JTable,java.lang.Object,布尔值,布尔值,int,int)
     */
    公共组件 getTableCellRendererComponent(
        JTable表,
        对象价值,
        布尔值是否被选中,
        布尔值具有焦点,
        整数行,
        整数列){
        布尔值=假;
    
        if (Common.isEmpty(值)) {
            checkBox.setSelected(false);
        } 别的 {
    
            尝试 {
                val = ((布尔)值).booleanValue();
            } catch (异常 e) {
            }
            checkBox.setSelected(val);
        }  
    
        if (Common.OPTIONS.highlightEmpty.isSelected() && value == Common.MISSING_VALUE) {
            checkBox.setBackground(Common.EMPTY_COLOR);
        } else if (值== Common.MISSING_REQUIRED_VALUE) {
            checkBox.setBackground(Common.MISSING_COLOR);
        } 别的 {
            ...
        }
    
        checkBox.setSelected(val);
        返回复选框;
    }
    }
    
  • 对于 checkboxEditor,您可以使用 DefaultCellEditor 类。

You need to setup a TableCellRenderer and TableCellEditor

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

Once you have defined the render's / editor's you can

  • define the render/editor as the default render for a Type

    table.setDefaultRenderer(Boolean.class, new MyBooleanRender());
    table.setDefaultEditor(Boolean.class, new MyBooleanCellEditor());

  • define the render / editor to a column

    TableColumnModel tcm = table.getColumnModel();
    tcm.getColumn(4).setCellRenderer(new MyBooleanRender());
    tcm.getColumn(4).setCellEditor(new MyBooleanCellEditor());


  • You can define a checkbox cellRender like:

    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;
    }
    }
    
  • For a checkboxEditor, you can use the DefaultCellEditor class.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文