Я пытался заставить JMenu вести себя как JButton, но у меня есть некоторые проблемы, и надо надеяться кто-то здесь может помочь!
Я добавил MenuListener к объекту JMenu с этим, но я не могу добраться, всплывающее меню,/focus для отъезда, чтобы позволить мне правильно нажать JMenu, повторило времена для инициирования этой функции, и я надеялся, что кто-то мог сказать мне, что я делаю неправильно.Спасибо.
public void menuSelected(MenuEvent e)
{
... // do stuff here code
JMenu source = (JMenu)e.getSource();
source.setSelected(false);
source.setPopupMenuVisible(false);
}
Не совсем понимаю, о чем вы спрашиваете ...
Но JMenuBar
наследуется от Контейнера
- если вы предпочитаете добавить JButton
в это, чем JMenu
, вы можете просто вызвать -
JMenuBar menuBar = ....
JButton myButton = ....
menuBar.add(myButton);
Очень трудно определить, что вы пытаетесь здесь сделать. Но я не думаю, что вы правильно используете JMenu.
JMenu - это объект, представляющий меню. Он отделен от строки меню (JMenuBar) и от пункта меню (JMenuItem). JMenuBar обычно содержит несколько JMenus (File, Edit и т.д.), которые в свою очередь содержат несколько JMenuItems (New, Open, Close). JMenuItems - это то, что нажимается и "действует как кнопка" в меню.
Чтобы заставить пункт меню действовать как кнопка, просто добавьте его в меню. Например:
JMenu fileMenu = new JMenu("File");
JMenuItem newChoice = new JMenuItem("New");
newChoice.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
newHasBeenSelected();
}
});
fileMenu.add(newChoice);
Если вы пытаетесь создать всплывающее меню, вам нужно использовать JPopupMenu вместо JMenu, и вам не нужен JMenuBar. Вот учебники Java по меню: http://java.sun.com/docs/books/tutorial/uiswing/components/menu.html
А вот документация по Java для JMenuBar, JMenu, JPopupMenu, и JMenuItem.
Если вы отредактируете свой вопрос и дадите более подробное объяснение того, что вы делаете, я смогу оказать более конкретную помощь.
Этот пример кода работает в eclipse, опять беспокоит, как вы его используете?
public class MyMenuFrame extends JFrame {
public MyMenuFrame() throws HeadlessException {
super("My Frame");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(400, 300);
Container pane = this.getContentPane();
pane.setLayout(new BorderLayout());
pane.add(new JLabel("Hi there"), BorderLayout.PAGE_START);
this.setVisible(true);
JMenuBar menubar = new JMenuBar();
JMenu menu = new JMenu("File");
menu.addMenuListener(new MenuListener() {
@Override
public void menuSelected(MenuEvent e) {
System.out.println("a");
}
@Override
public void menuDeselected(MenuEvent e) {
System.out.println("a");
}
@Override
public void menuCanceled(MenuEvent e) {
System.out.println("a");
}
});
menubar.add(menu);
this.setJMenuBar(menubar );
}
public static void main(String[] args) {
new MyMenuFrame();
}
}