java - 删除 JTable 标题上的边框

标签 java swing jtable border jscrollpane

我有一个 JTable 通过 JScrollPane.setRowHeaderView(JTable) 附加到 JScrollPane。 看起来像这样:

enter image description here

但是我想去除行号表周围的边框(3d 效果):

enter image description here

太厚了。任何想法如何删除它?

public class SimpleJTableHeader extends JFrame {

    public JTable table;

    public SimpleJTableHeader() {

        // CREATE A JTABLE
        Object rowData[][] = { { "a" }, { "b" }, { "c" }, { "d" } };
        Object columnNames[] = { "1" };
        table = new JTable(rowData, columnNames);
        table.setRowHeight(20);
        JScrollPane scrollPane = new JScrollPane(table);

        // ADD ROW NUMBERS TO THE TABLE
        scrollPane.setRowHeaderView(getHeaderTable());

        // SHOW TABLE
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(scrollPane, BorderLayout.CENTER);
        frame.setSize(300, 150);
        frame.setVisible(true);
    }

    public JTable getHeaderTable() {
        final AbstractTableModel model = new AbstractTableModel() {

            private static final long serialVersionUID = 1L;

            @Override
            public int getColumnCount() {
                return 1;
            }

            @Override
            public Object getValueAt(int row, int column) {
                return table.convertRowIndexToModel(row);
            }

            @Override
            public int getRowCount() {
                return table.getRowCount();
            }
        };
        JTable headerTable = new JTable(model);
        headerTable.setPreferredScrollableViewportSize(new Dimension(40, 0));
        headerTable.setRowHeight(20);
        headerTable.getColumnModel().getColumn(0).setCellRenderer(new TableCellRenderer() {
            @Override
            public Component getTableCellRendererComponent(JTable x, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
                Component component = table.getTableHeader().getDefaultRenderer().getTableCellRendererComponent(table, value, false, false, -1, -2);
                component.setBackground(new Color(250, 250, 250));
                return component;
            }
        });
        return headerTable;
    }

    public static void main(String args[]) {
        new SimpleJTableHeader();
    }
}

最佳答案

您可以转换 getTableCellRendererComponent() 返回的组件调用 JComponent然后根据需要设置边框:

    headerTable.getColumnModel().getColumn(0).setCellRenderer(new TableCellRenderer() {
        @Override
        public Component getTableCellRendererComponent(JTable x, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            JComponent component = (JComponent)table.getTableHeader().getDefaultRenderer().getTableCellRendererComponent(table, value, false, false, -1, -2);
            component.setBackground(new Color(250, 250, 250));
            component.setBorder(BorderFactory.createEmptyBorder());
            return component;
        }
    });

无论如何,您可能想看看 Rob Camick 的 RowNumberTable很好的例子。

关于java - 删除 JTable 标题上的边框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20905764/

相关文章:

java - 在具有多种泛型类型的 Java 中实现抽象泛型方法

java - java中的网格布局行为

java - 是否可以在 JTable 渲染器中进行查询?

java - 在内存 DB 中的 H2 中插入日期时 DateTimeFormat 无效

java - 比较两个不同映射的键值

java - 如何设置代码以便允许按钮中使用值 "X"和 "O"?

java - 如何突出显示 jtable 单元格的文本?

java - 在运行时更改 jTable 模型

java - EventQueue 工作缓慢

java - JFileChooser 不显示文本文件