繁体   English   中英

我可以制作没有边框的JTable列吗?

[英]Can i make a JTable column without borders?

我创建了一个包含JTextArea + A JButton的单元格的列,如下面第3列中的图片所示:

替代文字

但是在更新该列中的单元格值时,我遇到了很多问题,我的CellRenderer和CellEditor,因为我的代码有点复杂。 所以我想用2列替换该列。 一列是正常的String单元格 ,另一列是JButton单元格,但这两列应该与上面图像中出现的第3列具有相同的外观。 所以我的问题是

1.如何将2列的标题合并在一起?

2.如何删除JButtons列的左边框?

如果这些是固定的,那么2列将具有与上面图像相同的外观+更新单元格值将更容易。

--------------------------------编辑:我的代码示例问题:

好的......你问了。 我的代码是巨大的,但如果你可以帮助我修复它,那将是完美的。 我为我的问题创建了一个正在运行的jar示例,并包含了我的源代码。 你可以在这里下载 :

罐子样品

问题是我使用一个按钮来允许排序表行(向上/向下移动),但是当我这样做时,一些移动的单元格值不会更新!

您可以看到以下屏幕截图: 替代文字 问题出在我正在使用的单元格编辑器中...但我无法修复它。

在创建空表模型时更新UPDATE ,创建ButtonCellRenderer的两个实例(而不是4),并将一个实例设置为第2列的编辑器和渲染器,第3列设置为第3列。此修复在移动行时显示错误的值,但有时在悬停时绘制空单元格。

关于代码不工作,每当鼠标移动时重新启动单元格编辑可能会引入问题,因为您在每次鼠标移动时都在单元格编辑器和渲染器之间切换。 即使您使用JTextArea(应该是JTextField),我也无法编辑任何值。 每次更改行的顺序时重新创建表模型都可以,但最好创建一个包含所有列的值的类,并使用这些类的Vector作为表模型。 这样,您可以重新排序向量中的值,并且将更新表模型。

如果要合并两个头,请覆盖JTableHeader getHeaderRect(int col) ,以返回两列的super.getHeaderRect()的并集。 您可能还需要覆盖BasicTableHeaderUI的paint()方法,以在前两个上绘制宽标题。

这是我用来合并表格单元格的方法,但它也适用于标题。

对不起,我无法给你确切的代码。 就个人而言,我会编写自定义单元格渲染器,即您的第一种方法。

编辑如果你想使用金属LaF,这个代码有点不绘制第二列的标题:

    final TableCellRenderer defaultRenderer = getTableHeader().getDefaultRenderer();
    getTableHeader().setDefaultRenderer(new DefaultTableCellRenderer() {
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            JLabel c = (JLabel) defaultRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            if (column == 1)
                c.setBorder(BorderFactory.createMatteBorder(1, 1, 1, 0, Color.gray));
            else if (column == 2) {
                c.setBorder(BorderFactory.createMatteBorder(1, 0, 1, 1, Color.gray));
                c.setText(null);
            } else
                c.setBorder(BorderFactory.createMatteBorder(1, 1, 1, 1, Color.gray));
            return c;
        }
    });

您可以创建一个没有边框(空边框)的JButton来实现TableCellRenderer吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM