java - 我将如何将 boolean 字符串更改为 JTable 中的 JCheckBox?

标签 java swing jtable boolean jcheckbox

好吧。我已经实现了一个自定义 JTable 模型,其中包括整个

@Override
public Class<?> getColumnClass(final int column) {

里面有我

if (column == 0)
    return Boolean.class;

当我运行时,我转到 JTable,而不是选中的 JCheckbox,它显示 true。当我单击它时,它会变成一个 JCheckBox ,直到我取消单击,然后才会显示 true 或 false。

我做错了什么!!!???

最佳答案

实在不知道,你可以对比一下你的代码

注意 Column.Class 的两个定义都是有效的,您可以尝试取消注释阻止的代码

enter image description here

import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;

public class TablePrepareRenderer extends JFrame {

    private static final long serialVersionUID = 1L;
    private JTable table;

    public TablePrepareRenderer() {
        Object[] columnNames = {"Type", "Company", "Shares", "Price", "Boolean"};
        Object[][] data = {
            {"Buy", "IBM", new Integer(1000), new Double(80.50), false},
            {"Sell", "MicroSoft", new Integer(2000), new Double(6.25), true},
            {"Sell", "Apple", new Integer(3000), new Double(7.35), true},
            {"Buy", "Nortel", new Integer(4000), new Double(20.00), false}
        };
        DefaultTableModel model = new DefaultTableModel(data, columnNames);
        table = new JTable(model) {

            private static final long serialVersionUID = 1L;

            /*@Override
            public Class getColumnClass(int column) {
            return getValueAt(0, column).getClass();
            }*/
            @Override
            public Class getColumnClass(int column) {
                switch (column) {
                    case 0:
                        return String.class;
                    case 1:
                        return String.class;
                    case 2:
                        return Integer.class;
                    case 3:
                        return Double.class;
                    default:
                        return Boolean.class;
                }
            }

            @Override
            public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
                Component c = super.prepareRenderer(renderer, row, column);
                int firstRow = 0;
                int lastRow = table.getRowCount() - 1;
                if (row == lastRow) {
                    ((JComponent) c).setBackground(Color.red);
                } else if (row == firstRow) {
                    ((JComponent) c).setBackground(Color.blue);
                } else {
                    ((JComponent) c).setBackground(table.getBackground());
                }
                return c;
            }
        };
        table.setPreferredScrollableViewportSize(table.getPreferredSize());
        JScrollPane scrollPane = new JScrollPane(table);
        getContentPane().add(scrollPane);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                TablePrepareRenderer frame = new TablePrepareRenderer();
                frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }
}

关于java - 我将如何将 boolean 字符串更改为 JTable 中的 JCheckBox?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7183503/

相关文章:

java - 如何在java中减去两列值并显示在另一列中

java - JTable 选择其他行并在单击某个单元格时获取其数据

java - 性能 - 用Java进行字符串操作以获得最多重复的字符

java - 如何为 .equals() 设置可接受的数值;命令?

java - 如何将一个文本拆分为多个文本文件

Java Swing 定时器

java - 自定义 swing 组件 - 将节点转为文本

java - JMenuItem 设置对齐方式和最大尺寸

java - 在 JTable 中设置列​​的顺序

java - BoxLayout 未显示所有组件