Этого можно добиться, изменив фон и передний план панели в положении табуляции с помощью некоторого таймера.Просто измените его на некоторый интервал, и он будет выглядеть как мигание.Вот демонстрация для этого:
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.Но цвет переднего плана (цвет текста) все еще будет мигать.