【问题标题】:Change a JTable's Look and Feel更改 JTable 的外观
【发布时间】:2011-10-25 15:16:46
【问题描述】:

我有一个 JTable,需要更改它的一些属性,例如它的高亮颜色。

This website表示表中有“highlight”、“light”等字段。

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

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

我真正想要的是当您将鼠标悬停在一行上时更改它的颜色,我不确定Highlight 是否会这样做,或者我是否必须通过实施鼠标监听器。不过,我仍然希望能够更改其他 L&F 设置。

【问题讨论】:

  • 另见Customizing JTable,您的问题可能重复。
  • @trashgod 我对更改标题 UI 不感兴趣,而是更改实际字段 ui,并且想要一些示例或帮助。
  • @StanislavL 您能否以更好的方式和正确的答案解释一下?最好包括一个例子?
  • 您引用的属性字符串是用于访问由UIManager 为特定外观和感觉建立的默认值映射的键。
  • 渲染器示例可以在here找到。

标签: java swing jtable look-and-feel


【解决方案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);
    }

【讨论】:

  • mouseMoved() 的末尾添加了table.repaint();,并对这段代码进行了一些修改,效果很好。谢谢。
【解决方案2】:

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

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

希望对您有所帮助!

【讨论】:

  • 感谢您的回答!我试过 UIManager.put("highlight", Color.red);但它似乎没有工作。接下来我会尝试一些其他颜色值。
【解决方案3】:

有四种方法

1) 覆盖用户界面

2) 使用渲染器

3) 为了更好更好地输出到 GUI,我建议更改 Look and Feel 或使用 Nimbus Look and FeelSynth Look and Feel

4) 将所有上午选项放在一起,并为 JViewPortScrollBar 自定义绘画

【讨论】:

  • @David confortable 将寻找 prepareRenderer(适用于整个 TableView)和 TableCellRenderer(对特定 TableColumn 有效),请谨慎使用 JTable、TableCellRenderer 和 TableCellEditor 的 Opacities(用于 getTableCellRendererComponent( ...)来自您发布的链接),我不确定 Opacity 是否按预期工作,请遵循此论坛中的示例,有很多更好的代码和出色的描述
  • +1 特别是对于 3) 和良好的链接。很难选择答案,但我正在寻找 SSCCE。不过,我从中学到了很多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多