假设您有一个包含五个或更多选项卡的用户界面,并且您需要通知用户选项卡“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是要闪烁的选项卡索引.停止闪烁停止计时器并将前景色和背景色设置为默认值.
I am also interested in kNowing how to force the focus on tab 2 if it
is possible.
如果要将焦点转移到该选项卡,可以使用setSelectedindex(int index)方法.
编辑:-
正如@perp在评论中说的那样(我也测试了它并且他是对的)这对于WindowDefault以外的外观和感觉都不起作用.但前景色(文字颜色)仍然会闪烁.