Java 如何通知用户JTabbedPane中的特定选项卡需要注意?

Java 如何通知用户JTabbedPane中的特定选项卡需要注意?,java,focus,jtabbedpane,Java,Focus,Jtabbedpane,假设您有一个包含五个或更多选项卡的用户界面,您需要通知用户选项卡“2”需要注意 有办法做到这一点吗?例如,使选项卡闪烁橙色,或更改选项卡的颜色?我一直没有成功 编辑:如果可能的话,我还想知道如何强制将焦点放在选项卡2上。查看您可以使用图标来表示需要注意的选项卡。您可以通过使用计时器更改选项卡位置处窗格的背景和前景来实现这一点。只要每隔一段时间改变一下,它就会看起来像是在闪烁。这是一个演示: JFrame frame = new JFrame(); frame.setSize(40

假设您有一个包含五个或更多选项卡的用户界面,您需要通知用户选项卡“2”需要注意

有办法做到这一点吗?例如,使选项卡闪烁橙色,或更改选项卡的颜色?我一直没有成功


编辑:如果可能的话,我还想知道如何强制将焦点放在选项卡2上。

查看您可以使用
图标来表示需要注意的选项卡。

您可以通过使用计时器更改选项卡位置处窗格的背景和前景来实现这一点。只要每隔一段时间改变一下,它就会看起来像是在闪烁。这是一个演示:

    JFrame frame = new JFrame();
    frame.setSize(400, 400);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    final JTabbedPane pane = new JTabbedPane();

    JPanel jPanel = new JPanel();
    JButton button = new JButton("Blink tab");
    jPanel.add(button);
    pane.addTab("adsad", jPanel);

    JPanel jPanel1 = new JPanel();
    jPanel1.add(new JLabel("hi"));
    pane.addTab("werqr", jPanel1);

    final Color defaultBackColor = pane.getBackgroundAt(1); // default background color of tab
    final Color defaultForeColor = pane.getForegroundAt(1); // default foreground color of tab

    button.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            Timer timer = new Timer(500, new ActionListener() {
                boolean blinkFlag = false;
                @Override
                public void actionPerformed(ActionEvent e) {
                    blink(blinkFlag);
                    blinkFlag = !blinkFlag;
                }
            });
            timer.start();
        }
        private void blink(boolean blinkFlag) {
            if (blinkFlag) {
                pane.setForegroundAt(1, Color.green);
                pane.setBackgroundAt(1, Color.orange);
            } else {
                pane.setForegroundAt(1, defaultForeColor);
                pane.setBackgroundAt(1, defaultBackColor);
            }
            pane.repaint();
        }
    });

    frame.add(pane);
    frame.setVisible(true);
此处
1
是要闪烁的选项卡索引。要停止闪烁,请停止计时器,并将前景色和背景色设置为默认值


我还想知道,如果需要,如何强制将焦点放在选项卡2上 这是可能的

如果要将焦点转移到该选项卡,可以使用
setSelectedIndex(int index)
方法


编辑:-


正如@perp在评论中所说(我也测试过了,他是对的),除了WindowDefault之外,这对外观和感觉不起作用。但是前景颜色(文本颜色)仍然会闪烁。

不错,但我仍在寻找其他方法来实现它。如果没有更好的方法,我会将此标记为答案。请注意,如果使用带蒙皮的Windows外观(即,不是Windows经典主题),则更改背景色不会产生任何效果。WindowsTabbedPaneUI在选项卡顶部绘制一个自定义蒙皮,该蒙皮有效地隐藏了设置的任何背景颜色。因此,该解决方案在外观和感觉上并不完全可移植,尽管文本颜色仍会闪烁。@Prep:我还没有在不同的外观和感觉上测试过它,所以没有意识到这一点。谢谢你指出这一点。更新了答案。