如果在jtable中选择新单元格,如何更改单元格的边框?

时间:2013-11-08 16:06:44

标签: java swing jtable tablecellrenderer listselectionlistener

无论是鼠标还是键盘,无论何时选择单元格,我都希望更改单元格的边框。 在网上很难找到smth。我尝试使用ListSelectionListener,但这不起作用。

如果您知道改变小区边界的好方法,请回复。 我欢迎任何想法。

谢谢!

2 个答案:

答案 0 :(得分:3)

使用自定义的TableCellRenderer在选择单元格时执行不同的操作。

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

查看上面示例中的代码,您可以看到如何查看isSelected布尔参数。

 public Component getTableCellRendererComponent(
                        JTable table, Object color,
                        boolean isSelected, boolean hasFocus,
                        int row, int column) {
    Color newColor = (Color)color;
    setBackground(newColor);
    if (isBordered) {
        if (isSelected) {
            ...
            //selectedBorder is a solid border in the color
            //table.getSelectionBackground().
            setBorder(selectedBorder);
        } else {
            ...
            //unselectedBorder is a solid border in the color
            //table.getBackground().
            setBorder(unselectedBorder);
        }
    }

但是,在您的实现中,只需扩展DefaultTableCellRenderer并首先调用getTableCellRendererComponent的super()版本,然后只更改单元格颜色。

答案 1 :(得分:2)

这是默认行为。单元格边框基于表的Table.focusCellHighlightBorder属性设置。因此,您可以使用UIManager更改默认边框。有关详细信息,请参阅UIManager Defaults

如果由于某种原因这不符合您的要求,那么我会查看Table Row Renderering,这样您就可以在一个地方执行此操作,而不是为表中的每种数据类型创建自定义渲染器。