2011-08-06 1 views
6

5つ以上のタブを持つユーザーインターフェイスがあり、タブ "2"に注意が必要であることをユーザーに知らせる必要があるとします。JTabbedPane内の特定のタブに注意が必要であることをユーザーに通知するにはどうすればよいですか?

これを行う方法はありますか?たとえば、タブをオレンジ色に点滅させるか、タブの色を変更しますか?私はrequestFocusで成功しませんでした。

編集:可能であれば、タブ2に焦点を当てる方法を知ることにも興味があります。

答えて

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)メソッドを使用できます。


編集: -

として(また、私はそれをテストしていると、彼は右である)、これは一見のために働くとWindowDefault以外に感じることはありませんコメントで@perpで言いました。しかし、前景色(文字色)はまだ点滅します。

+0

スキンされたWindowsのルック・アンド・フィール(つまり、Windowsのクラシックテーマではない)を使用する場合、背景色を変更すると何も起こりません。 WindowsTabbedPaneUIは、タブの上にカスタムスキンをペイントし、背景色が設定されているものを効果的に隠します。したがって、テキストの色はまだ点滅しますが、ソリューションは完全なルック・アンド・フィールでは移植できません。 – perp

+0

@Prep:私はそれを認識していないので、別のルックアンドフィールでそれをテストしていません。それを指摘してくれてありがとう。答えを更新しました。 –

+0

すばらしい答え。ありがとう! – David

関連する問題