改变JTable的外观和感觉

时间:2011-08-12 08:33:55

标签: java swing jtable look-and-feel

我有一个JTable,需要更改它的一些属性,例如它的突出显示颜色。

This website表示表格中有字段,例如“highlight”和“light”。

enter image description here

我无法在任何地方找到它们。当您创建JTable的实例时,智能感知中不会出现任何涉及“突出显示”或“亮”的内容。 (但是某些方法如table.setFont()会显示出来。)

我注意到table.setUI();,但我不知道如何使用它,或者它是否与此有关。

我正在寻找的是当你将鼠标悬停在它上面时改变它的颜色,我不确定Highlight是否会这样做,或者我是否必须走很长的路要走实现mouseListener。我仍然希望能够改变其他L& F设置。

3 个答案:

答案 0 :(得分:1)

您可以通过在渲染JTable之前使用方法#put(String, String)UIManager(或UIDefaults)中引用一个或多个属性来实现目标。

此链接也可能对您有所帮助:http://www.java2s.com/Code/Java/Swing-JFC/ListUIPropertiesinaJTableandsortable.htm

希望它会有所帮助!

答案 1 :(得分:1)

有四种方式

1)覆盖UI

2)使用渲染器

3)为GUI提供更好更好的输出我建议更改Look and Feel或使用Nimbus Look and FeelSynth Look and Feel

4)将所有a.m.选项放在一起并使用自定义绘画进行JViewPortScrollBar

答案 2 :(得分:1)

我不确定下面的代码是否有效,因为我从我的一个旧项目代码的某些块中抓取并修改了它,但你可以试试。

public class MyTable extends JTable implements MouseMotionListener {
    int mouseHoverRow = -1;

    public MyTable() {
           addMouseMotionListener(this);
    }

    //codes

    public Component prepareRenderer(TableCellRenderer renderer, int rowIndex,
            int vColIndex) {
        Component c = super.prepareRenderer(renderer, rowIndex, vColIndex);
        Color back = getSelectionBackground();
        int red = back.getRed();
        int green = back.getGreen();
        int blue = back.getBlue();
        if (rowIndex == mouseHoverRow) {
            c.setBackground(Color.LIGHT_GRAY);
        } else {
            c.setBackground(getBackground());
        }
        return c;
    }

    public void mouseMoved(MouseEvent e) {
        Point p = new Point(e.getX(), e.getY());
        mouseHoverRow = rowAtPoint(p);
    }