假设您有一个包含五个或更多选项卡的用户界面,您需要通知用户选项卡“2”需要注意。
有没有办法做到这一点?例如让选项卡闪烁橙色,或更改选项卡的颜色?我在 requestFocus 上没有成功。
编辑:如果可能的话,我也有兴趣知道如何将焦点集中在选项卡 2 上。
假设您有一个包含五个或更多选项卡的用户界面,您需要通知用户选项卡“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,您可以使用 anicon
来表示需要注意的选项卡。