jMenuItem не появляется - PullRequest
       3

jMenuItem не появляется

0 голосов
/ 13 ноября 2018

Я только начал использовать Java Swing, и у меня возникла проблема. Я попытался сделать простую строку меню и пункт меню «Выход», но перед тем, как связать кнопку с действием, появился элемент меню, теперь, когда я связал кнопку с действием System.exit (0), оно исчезло. Помогите? Код следующий:

in MainPanel (автогенерируемый код из свинга исключен):

public void init() {
    initComponents();
    initActions();  

    setLocationRelativeTo(null); 
    pack();
    setVisible(true);
}

private void initActions() {
    this.menuItemExit.setAction(Application.getInstance().getPanelControl().getActionExit());

}

In PanelControl :

public class PanelControl {

    private Action actionExit;


    public Action getActionExit() {
        return actionExit;
    }



public class ActionExit extends AbstractAction{

    public ActionExit(){
        putValue(Action.NAME, "Exit");
        putValue(Action.SHORT_DESCRIPTION, "Exit from the application");
        putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("ctrl e"));
        putValue(Action.MNEMONIC_KEY, KeyEvent.VK_E);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        System.exit(0);
    }

}

В Приложение :

private void init() {
    viewMainPanel = new MainPanel();
    controlPanel = new ControlPanel();
    viewMainPanel.init();

}

Я думаю, что проблема где-то здесь, но я не могу понять, где. любая помощь? (есть другой код, но я просто поместил более релевантную часть, также я перевел код с итальянского, поэтому извините, если есть какие-либо проблемы или несколько имен не совпадают)

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Элемент меню должен быть добавлен к компоненту Native Java Swing. Вы должны добавить его в JFrame. Вы не можете добавить MenuItem на панель. Родительский «корневой» контейнер в любом приложении Java Swing является «нативным» и JFrame. Все остальное в этом контейнере «нарисовано» в прямоугольнике, используя внешний вид по вашему выбору.

Затем вы СОЗДАЕТЕ MenuItem, используя свой элемент TAbstractAction. Этот объект МОЖЕТ быть использован для создания кнопки JButton, JMenuItem или ToolBar. Сохраняя ссылку на ваш TAbstractAction в своем коде, вы можете включить / отключить объект, и он реализует «наблюдаемый» шаблон, в котором он включает / отключает ВСЕ элементы управления пользовательским интерфейсом, которые вы использовали для создания с ним. Я на самом деле написал Java Swing Framework для создания Java-приложений. Раньше это было на веб-сайте Sun Open Source. Если хотите, я могу поставить его на GitLab, чтобы вы могли с ним поиграть. Java Swing хорош, но JavaFX должен быть долгосрочной целью для пользовательского интерфейса в JVM.

В вашем объекте JFrame вам нужно сделать следующее:

 _menuBar = new JMenuBar();

  // add controls to the frame
  setJMenuBar(_menuBar);

Затем вам нужно добавить свой 'exitMenuItem' в элемент управления _MenuBar. Приветствия

0 голосов
/ 13 ноября 2018
private Action actionExit;


public Action getActionExit() {
    return actionExit;
}

Ваша переменная actionExit равна нулю.

Нигде в вашем коде вы не создаете экземпляр своего класса ActionExit.

Где-то, что вам нужно:

actionExit = new ActionExit();

Ваш дизайн кажется немного сложным, я понятия не имею, почему у вас есть панель просто для создания экземпляра класса ActionExit.

Я бы посоветовал вам просто создать экземпляр ActionExit в вашем основном классе и избавиться от класса PanelControl.

Вместо того, чтобы использовать IDE для создания запутанного кода, вам следует подумать о том, как написатьзакодируйте себя, чтобы вы могли лучше структурировать свои классы.Прочитайте раздел из учебника по Swing на Как использовать меню для рабочего примера, чтобы начать работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...