[英]Java: Windows 7 look-and-feel (or MouseListener?) requires clicking twice on JOptionPane
我有一个带有菜单栏的简单应用程序。 菜单栏上的按钮(JMenu)打开文件。
单击此按钮将打开一个具有输入字段的JOptionPane,以及按钮“确定”和“取消”。
但是,您需要至少单击一次JOptionPane才能与任何组件(按钮或输入字段)进行交互(用鼠标)。 这意味着,如果您输入路径,则必须在“确定”按钮上单击两次。
我认为这是一个焦点问题,但是键盘输入效果很好。
奇怪的是,默认的UI外观不会导致此错误,但是我的JOptionPane之前运行良好(并且我具有系统UI外观和MouseListener),所以说实话根本不知道导致此错误的原因。
代码在这里:
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JOptionPane;
import javax.swing.UIManager;
public class Classe1 {
public static void main(String[] args) throws Exception {
JFrame jf = new JFrame();
//Commenting this line makes it behave correctly
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setSize(new Dimension(400, 200));
jf.setVisible(true);
jf.setLocationRelativeTo(null);
JMenuBar mb = new JMenuBar();
JMenu test = new JMenu("Open file");
test.addMouseListener(new MouseListener() {
@Override
public void mousePressed(MouseEvent arg0) {
JOptionPane jop = new JOptionPane();
jop.requestFocus();
//There is a warning, but if you do "JOptionPane.showInputDialog(...)" it doesn't do anything.
Object input = jop.showInputDialog(jf, "Enter path", "Title", JOptionPane.PLAIN_MESSAGE, null, null, "");
}
@Override
public void mouseEntered(MouseEvent arg0) {
}
@Override
public void mouseExited(MouseEvent arg0) {
}
@Override
public void mouseClicked(MouseEvent arg0) {
}
@Override
public void mouseReleased(MouseEvent arg0) {
}
});
mb.add(test);
jf.add(mb);
}
}
JMenu
一直具有焦点,直到释放鼠标为止,但是在按下鼠标时对话框会打开。
使用ActionListener
(推荐),或者在释放鼠标时进行逻辑处理。
无论如何,对鼠标按下的操作通常会有不良的使用体验。 用户期望如果在按下鼠标按钮时将鼠标从按钮上移开(什么是“误按”),则什么也不会发生。 这篇文章将详细介绍鼠标事件的用户体验。
试试这个,我想它适用于双击
public void mouseClicked(MouseEvent arg0)
{
if(arg0.getClickCount() == 2)
{
// your code to execute
}
}
同样,您可以尝试单击
public void mouseClicked(MouseEvent arg0)
{
if(arg0.getClickCount() == 1)
{
// your code to execute
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.