Как удалить существующую JPanel и постоянно внедрять слушатель действий? - PullRequest
0 голосов
/ 17 января 2019

Я пытаюсь создать графический интерфейс JFrame / JPanel для личного проекта, над которым я работаю. Я хочу различать бета-режимы и режимы запуска через два меню, которые помечены бета и кнопкой запуска соответственно. После реализации второго JPanel у меня не было возможности заставить слушателя действия продолжать отвечать на кнопки (после того, как он отобразит новые меню), и при этом я не смог заставить старую панель исчезнуть, я вполне уверен, что Я просто пишу над этим. У меня проблемы с слушателями действий, у которых не должно быть никаких проблем, так как они добавляются, когда я создаю кнопки, и мне не удается найти лучший способ справиться с дубликатами JPanels

Ниже приведены некоторые фрагменты моего кода

Я пытался использовать удаление (панель), добавление новой панели, новой рамки и т. Д.

Когда я перемещаю вызов add в BorderLayout.SOUTH, я вижу, что на новой панели есть мое меню оригинального режима и мои 2 JComboBox, отображаемые по желанию, но мое меню оригинального режима все еще там и больше не работает, когда я нажимаю , Новое меню внизу позволяет мне щелкнуть один раз и напечатать мое утверждение ДВАЖДЫ, прежде чем перестает отвечать. Если я не нажму кнопку режима BETA и просто нажму кнопку запуска, она будет печататься дважды каждый раз для нижней части, для верхней части она печатается один раз и позволяет мне делать это столько, сколько я хочу.

    protected JButton betaModeButton, launchModeButton;
JPanel modePanel;
public View() {
    setLayout(new BorderLayout());
    setup();
}
public void setup() {
    add(modeButtons(), BorderLayout.NORTH);
    System.out.println("setup");
}


/**
 * choose your mode for testing or implementation
 * @return
 */
protected JPanel modeButtons() {
    modePanel =  new JPanel(new GridLayout(1,2));

    betaModeButton = new JButton("BETA");
    betaModeButton.setOpaque(true);
    betaModeButton.addActionListener(this);

    launchModeButton = new JButton("LAUNCH");
    launchModeButton.setOpaque(true);
    launchModeButton.addActionListener(this);

    modePanel.add(betaModeButton);
    modePanel.add(launchModeButton);

    return modePanel;
}

private JPanel betaMenu() {

    System.out.println("Beta Menu should be added");
    JPanel comboMenu=new JPanel (new GridLayout(2,1));
    JPanel betaMenu=new JPanel(new GridLayout(1,2));

    //readd combo buttons
    comboMenu.add(modeButtons(), BorderLayout.NORTH);

    legShape= new JComboBox();
    legShape.addItem("Circle");
    legShape.addItem("Square");
    legShape.addItem("triangle");
    betaMenu.add(legShape);

    center= new JComboBox();
                 "code repeats structure

    betaModeButton.addActionListener(this);
    launchModeButton.addActionListener(this);

    comboMenu.add(betaMenu);
    return comboMenu;
}

Мой звонок выполнен (добавить betaMenu (), BorderLayout.SOUTH); проверки (); * +1010 *

Кнопки должны распечатываться при каждом нажатии, а верхнее меню должно исчезать

...