Tôi có một tình huống mà tôi cần để hiển thị một JOptionPane sau khi nhấp vào một JButton. JButton có biểu tượng mặc định và biểu tượng cuộn qua (hiển thị khi nào, tốt, con trỏ cuộn qua nút). Tuy nhiên, một khi nút được nhấp và một JOptionPane xuất hiện, biểu tượng rollover không thay đổi về bản gốc, và tiếp tục duy trì như vậy cho đến khi người dùng đưa chuột trở lại khung của JButton sau khi chọn một lựa chọn JOptionPane thích hợp. Làm thế nào tôi sẽ "un-rollover" các JButton khi nó được nhấp và JOptionPane được hiển thị?"Un-rollover" một JButton khi một JOptionPane được hiển thị
TL; DR: JButton hiển thị biểu tượng cuộn qua ngay cả khi được nhấp và JOptionPanel được hiển thị. Tôi không thích.
Đây là 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: Tôi đã tìm thấy một số tương tự câu hỏi để thế này. Tuy nhiên, câu hỏi này không phải là một bản sao bởi vì những câu hỏi liên quan đến một vấn đề hơi khác với vấn đề này (chẳng hạn như nút bấm được nhấn, không được cuộn qua). Một vài trong số những câu hỏi này (tốt, thực sự tất cả chúng tôi có thể tìm) là:
- 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: Cảm ơn bạn rất nhiều! Điều này làm nó rất độc đáo. Tôi đã tìm kiếm hàm setRollover() trên chính JButton thay vì trên ButtonModel. –