如何通知用户需要注意JTabbedPane中的特定Tab?

时间:2011-08-06 08:55:48

标签: java focus jtabbedpane

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

有办法做到这一点吗?例如,使标签闪烁橙色,或更改标签的颜色?我在requestFocus上没有成功。

编辑:我也有兴趣知道如果可能的话,如何强制关注标签2。

2 个答案:

答案 0 :(得分:6)

您可以通过使用某个计时器更改选项卡位置处的窗格的背景和前景来实现此目的。只需在某个时间间隔内更改它,它就会闪烁。这是一个演示:

    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以外的外观和感觉起作用。但前景色(文字颜色)仍会闪烁。

答案 1 :(得分:2)

查看http://download.oracle.com/javase/tutorial/uiswing/components/tabbedpane.html,您可以使用icon来表示需要关注的标签。