5 つ以上のタブを持つユーザー インターフェイスがあり、タブ "2" に注意が必要であることをユーザーに通知する必要があるとします。
これを行う方法はありますか?たとえば、タブをオレンジ色に点滅させたり、タブの色を変更したりしますか? 私はrequestFocusで成功していません。
編集:可能であれば、タブ 2 にフォーカスを強制する方法も知りたいです。
5 つ以上のタブを持つユーザー インターフェイスがあり、タブ "2" に注意が必要であることをユーザーに通知する必要があるとします。
これを行う方法はありますか?たとえば、タブをオレンジ色に点滅させたり、タブの色を変更したりしますか? 私はrequestFocusで成功していません。
編集:可能であれば、タブ 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以外のルックアンドフィールでは機能しません。ただし、前景色(テキストの色)は引き続き点滅します。
http://download.oracle.com/javase/tutorial/uiswing/components/tabbedpane.htmlを見るとicon
、 注意が必要なタブを示すために を使用できます。