我附加了一些JCheckBoxMenuItems到我的JMenu来代替JMenuItem。当用户点击JMenu时,它显示JCheckBoxMenuItems。一旦用户从JCheckBoxMenuItem中选择其中一个框,JCheckBoxMenuItems列表消失,即关闭。我如何覆盖默认动作,以便它保持打开状态(以便他们可以一次选择/取消选择多个框),直到用户单击JCheckBoxMenuItems之外的某个位置?如何防止JCheckBoxMenuItem单击后关闭?
0
A
回答
6
我见过的两个基本方法是让你自己的用户界面委托,这不是很漂亮,而且需要你为每个想要支持的平台提供一个用户界面委托,或者覆盖processMouseEvent
的JMenuItem
(或JCheckBoxMenuItem
在你的情况)。
例如...
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import javax.swing.Action;
import javax.swing.Icon;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JMenuBar mb = new JMenuBar();
JMenu menu = new JMenu("Lots-o-stuff");
mb.add(menu);
menu.add(new MyMenuItem("Apples"));
menu.add(new MyMenuItem("Pears"));
menu.add(new MyMenuItem("Bananas"));
JFrame frame = new JFrame("Testing");
frame.setJMenuBar(mb);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
}
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
}
public class MyMenuItem extends JCheckBoxMenuItem {
public MyMenuItem() {
}
public MyMenuItem(Icon icon) {
super(icon);
}
public MyMenuItem(String text) {
super(text);
}
public MyMenuItem(Action a) {
super(a);
}
public MyMenuItem(String text, Icon icon) {
super(text, icon);
}
public MyMenuItem(String text, boolean b) {
super(text, b);
}
public MyMenuItem(String text, Icon icon, boolean b) {
super(text, icon, b);
}
@Override
protected void processMouseEvent(MouseEvent evt) {
if (evt.getID() == MouseEvent.MOUSE_RELEASED && contains(evt.getPoint())) {
doClick();
setArmed(true);
} else {
super.processMouseEvent(evt);
}
}
}
}
相关问题
- 1. CheckComboBox:如何防止单击选择后关闭组合框?
- 2. 如何防止单击按钮后关闭QMessageBox
- 3. 如何防止关闭
- 4. 如何防止AlertDialog关闭?
- 5. 如何防止JFrame关闭
- 6. 如何防止contexmenustrip关闭?
- 7. 如何防止引导下拉菜单单击关闭父下拉菜单
- 8. jquery-mmenu:防止点击关闭
- 9. snapjs防止关闭元素点击
- 10. 防止在PositiveButton上关闭UIAlertView点击
- 11. 防止datepicker关闭时,外部点击
- 12. fancybox防止关闭点击窗外
- 13. 防止AlertDialog自动关闭NeutralButton点击???
- 14. 防止弹出从关闭点击wpf
- 15. tkinter菜单checkbutton - 防止菜单关闭
- 16. 防止Windows关闭
- 17. CDockablePane防止关闭
- 18. 防止AlertDialog关闭
- 19. 防止从关闭
- 20. 防止PrettyPhoto关闭
- 21. ColorBox - 防止关闭
- 22. 如何防止弹出Facebook框,如果点击关闭按钮
- 23. 如何防止父窗口关闭后进入后台?
- 24. 单击JButton后关闭jFrame
- 25. 点击后关闭菜单
- 26. 防止Boostrap模式关闭后LinkButton点击内部模式
- 27. 防止rich:popupPanel点击命令按钮后关闭
- 28. 如何防止对话从点击自动关闭黑莓
- 29. 如何防止点击其他元素关闭jQuery UI selectmenu?
- 30. 如何防止ajax工具包DropDownExtender在点击时关闭?
这两种方法我见过是,要么实现自己的UI委托(不是一个真正的好的解决方案),或实现自己的'JMenuItem'并重写'processMouseEvent',再次,不是很漂亮 – MadProgrammer