java - 覆盖 JTable 的 DefaultTableCellRenderer 以将 JTable 中的所有单元格居中

标签 java swing jtable renderer

我有一个无法摆脱的问题。

如你所知,我对使用 JTables 还很陌生,所以答案可能很简单,但我找不到解决方案:/

所以,我有一个使用 AbstractTableModel 的 JTable,它覆盖了

    public Class<?> getColumnClass(int columnIndex_p) 

方法,告诉要显示的每一列的类型。其中之一是 boolean 值。

当我创建一个简单的 JTable 时,使用

    table_l = new JTable(new MyTableModel());

一切正常,使用复选框(开/关)正确显示 boolean 值。

现在,我想将每个单元格上的文本居中(以后可能还有更多选项)。

所以我为每一列定义了一个新的 DefaultTableCellRenderer,如下所示:

    DefaultTableCellRenderer cellRenderer_l = new DefaultTableCellRenderer() {
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
          // delegate the rendering part to the default renderer (am i right ???)
          Component comp = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
          return comp;
        }
    }

然后我将此 CellRender 的水平对齐方式设置为:

    cellRenderer_l.setHorizontalAlignment(JLabel.CENTER);

然后我在 JTable 的每一列上安装这个新的 CellRenderer:

    for (int i = 0; i < table_l.getColumnCount(); ++i) {
        table_l.getColumnModel().getColumn(i).setCellRenderer(cellRenderer_l);
    }

但是,使用新的 CellRenderer,显示的 JTable 不再使用我的 TableModel 的 getColumnClass() 方法,因此只显示 boolean 值上的“true/false”字符串。

我不知道如何让它像以前一样使用 getColumnClass()。

如果有人知道答案... 谢谢

编辑: 感谢您所做的所有澄清。 事实上,我真正的问题是:“如何影响 JTable 的所有 DefaultRenderer 以使它们将结果集中在 JTable 的单元格中”

最佳答案

默认单元格renderer已经对 Boolean.class 类型的值执行了此操作,如图所示 here .如果这还不够,请编辑您的问题以包含 sscce展示您遇到的任何问题。

附录:如果您需要进一步自定义DefaultTableCellRenderer,请使用setDefaultRenderer() 为适用类型指定渲染器,如图所示here .

table.setDefaultRenderer(Boolean.class, yourCellRenderer); 

image

关于java - 覆盖 JTable 的 DefaultTableCellRenderer 以将 JTable 中的所有单元格居中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14769885/

相关文章:

java - 从 JTable 单元格获取值

java - org.eclipse.swt.SWTException : Failed to execute runnable (java. lang.NullPointerException)

java - JTree 节点标签经常变化但宽度被缓存

java - Swing worker 延迟

java - 在不创建新实例的情况下从 JInternalFrame 调用 JFrame 的方法

java - J表: Complex Cell Renderer

java - 在 NetBeans 7.1.1 中创建 UML 类图

javascript - 如何在非点击事件触发时停止重定向到页面

java - HikariCp 连接池在调用 oracle 数据库中的存储过程后无法重用 session

java - Jtable/JScrollPane 不会刷新(更新数据)