我附加了一些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