gpt4 book ai didi

java - "Un-rollover"显示 JOptionPane 时的 JButton

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:21:29 26 4
gpt4 key购买 nike

我有一种情况需要在单击 JButton 后显示 JOptionPane。 JButton 有一个默认图标和一个滚动图标(当鼠标滑过按钮时显示)。但是,单击按钮并出现 JOptionPane 后,鼠标悬停图标不会变回原来的状态,并且会继续保持这种状态,直到用户在选择适当的 JOptionPane 选项后将鼠标移回 JButton 的框架。单击 JButton 并显示 JOptionPane 时,我将如何“取消滚动”?

TL;DR:即使在单击 JButton 并显示 JOptionPanel 时,JButton 也会显示滚动图标。我不喜欢。

这是 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);
}

}

注意:我发现了几个类似的问题。但是,这个问题不是重复的,因为这些问题与这个问题略有不同(例如按钮保持按下状态,而不是滚动)。其中一些问题(好吧,实际上我能找到的所有问题)是:

最佳答案

翻转状态由 ButtonModel 管理.您可以通过模型的 setRollover(boolean b) 方法重置翻滚标志,这会将 Icon 设置回非翻滚状态 Icon。在您的示例 ActionListener 中实现:

b.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
b.getModel().setRollover(false);//reset the rollover flag
JOptionPane jOP = new JOptionPane("Dummy message");
JDialog dialog = jOP.createDialog(p, null);
dialog.setVisible(true);
}
});

您可能还希望在对话框关闭后检查鼠标是否仍位于 JButton 上以重置翻转标志(如果需要)- 您可以通过 MouseInfo 执行此操作,通过使用 SwingUtilities.convertPointFromScreen 将从 MouseInfo.getPointerInfo().getLocation() 检索到的屏幕坐标转换为组件坐标来检查 JButton 是否包含点.

关于java - "Un-rollover"显示 JOptionPane 时的 JButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30581812/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com