WindowsLookAndFeel 中的不同行为
Different behavior in WindowsLookAndFeel
我想显示一个弹出菜单,在使用 Metal L&F 时它会执行这些操作。
- 单击:打印“按下”并显示菜单
- 双击:打印“按下”并显示菜单。
是的,我需要它。但是当使用 WindowsLookAndFeel 时,它与那些不一样。
当两次按下它只是隐藏菜单而不是打印“按下”。为什么它在两个 L&F 之间有不同的行为?
import javax.swing.*;
import java.awt.event.*;
public class Popup {
public static void main(String[] args) {
JFrame f = new JFrame();
f.setSize(300, 300);
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (Exception ex) {
ex.printStackTrace();
}
JPopupMenu menu = new JPopupMenu();
menu.add("item");
f.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
System.out.println("pressed");
}
});
f.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
menu.show(f, e.getX(), e.getY());
}
});
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
boolean consumeEvent = UIManager.getBoolean("PopupMenu.consumeEventOnClose");
// Consume the event so that normal processing stops.
if(consumeEvent && !(src instanceof MenuElement)) {
me.consume();
}
我发现问题了,因为这个属性不一样
所以结束它
我想显示一个弹出菜单,在使用 Metal L&F 时它会执行这些操作。
- 单击:打印“按下”并显示菜单
- 双击:打印“按下”并显示菜单。
是的,我需要它。但是当使用 WindowsLookAndFeel 时,它与那些不一样。 当两次按下它只是隐藏菜单而不是打印“按下”。为什么它在两个 L&F 之间有不同的行为?
import javax.swing.*;
import java.awt.event.*;
public class Popup {
public static void main(String[] args) {
JFrame f = new JFrame();
f.setSize(300, 300);
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (Exception ex) {
ex.printStackTrace();
}
JPopupMenu menu = new JPopupMenu();
menu.add("item");
f.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
System.out.println("pressed");
}
});
f.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
menu.show(f, e.getX(), e.getY());
}
});
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
boolean consumeEvent = UIManager.getBoolean("PopupMenu.consumeEventOnClose");
// Consume the event so that normal processing stops.
if(consumeEvent && !(src instanceof MenuElement)) {
me.consume();
}
我发现问题了,因为这个属性不一样 所以结束它