Puede lograr esto cambiando el fondo y el primer plano del panel en la posición de la pestaña utilizando un temporizador. Simplemente cámbialo en algún intervalo y parecerá que está parpadeando. He aquí una demostración de esto:
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);
aquí 1
es el índice de tabulación que desea parpadear. Para dejar de parpadear, detén el temporizador y configura el color frontal y de fondo en los valores predeterminados.
También estoy interesado en saber cómo forzar el foco en la pestaña 2 si es posible.
Si desea transferir el enfoque a esa pestaña, puede utilizar el método setSelectedIndex(int index)
.
Editar: -
Como se dijo en el comentario por @perp (también he probado y tiene razón), esto no va a funcionar para apariencia distinta WindowDefault. Pero el color de primer plano (color del texto) seguirá parpadeando.
Tenga en cuenta que cambiar el color de fondo no sirve de nada si usa un aspecto y apariencia de Windows (es decir, no el tema clásico de Windows). WindowsTabbedPaneUI pinta una máscara personalizada en la parte superior de la pestaña que efectivamente oculta el color de fondo que se establece. Por lo tanto, la solución no es completamente portátil en apariencia, aunque el color del texto aún parpadeará. – perp
@Prep: No lo he probado con un aspecto y una sensación diferente, así que no estoy al tanto de eso. Gracias por mencionarlo. Actualizado la respuesta. –
Gran respuesta. ¡Gracias! – David