Ho una situazione in cui ho bisogno di visualizzare un JOptionPane dopo aver fatto clic su un JButton. JButton ha un'icona predefinita e un'icona di rollover (che visualizza quando, beh, il mouse scorre sopra il pulsante). Tuttavia, dopo aver fatto clic sul pulsante e visualizzato un JOptionPane, l'icona di rollover non cambia di nuovo all'originale e continua a rimanere tale fino a quando l'utente non riporta il mouse sul frame di JButton dopo aver selezionato un'opzione JOptionPane appropriata. Come faccio a "annullare il rollover" del JButton quando si fa clic e viene visualizzato JOptionPane?"Un-rollover" un JButton quando viene visualizzato un JOptionPane
TL; DR: JButton visualizza l'icona di rollover anche quando viene fatto clic e viene visualizzato JOptionPanel. Non mi piace.
Ecco il SSCCE:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.UIManager;
public class ButtonUnrollover {
public static void main(String[] args) {
JFrame f = new JFrame();
final JPanel p = new JPanel();
JButton b = new JButton();
b.setIcon(UIManager.getIcon("OptionPane.informationIcon"));
b.setRolloverIcon(UIManager.getIcon("OptionPane.errorIcon"));
// b.setSelectedIcon(UIManager.getIcon("OptionPane.informationIcon"));
// b.setRolloverSelectedIcon(UIManager.getIcon("OptionPane.informationIcon"));
// b.setPressedIcon(UIManager.getIcon("OptionPane.informationIcon"));
p.add(b);
b.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane jOP = new JOptionPane("Dummy message");
JDialog dialog = jOP.createDialog(p, null);
dialog.setVisible(true);
}
});
f.add(p);
f.pack();
f.setVisible(true);
}
}
NB: ho trovato molte simili domande a questo. Tuttavia, questa domanda non è un duplicato perché quelle domande riguardano un problema leggermente diverso da questo (come il pulsante premuto, non arrotolato). Alcune di queste domande (beh, in realtà tutti loro ho potuto trovare) sono:
- JButton stays pressed when focus stolen by JOptionPane
- JButton stays pressed after a JOptionPane is displayed
- JButton “stay pressed” after click in Java Applet
+1: Grazie mille! Questo lo fa molto bene. Stavo cercando la funzione setRollover() sul JButton stesso anziché su ButtonModel. –