Как я могу изменить содержание JFrame на соответствующий клик? - PullRequest
3 голосов
/ 22 февраля 2011

Я работаю над простым настольным приложением с Java. Существует строка меню, когда пользователь нажимает на элемент меню 1, затем содержимое изменяется на форму A. Когда пользователь нажимает на элемент меню 2, содержимое отображается на форме B.

Как мне этого добиться?

с использованием того же окна и только изменение содержимого.

Ответы [ 3 ]

5 голосов
/ 22 февраля 2011

Вы можете использовать CardLayout или просто удалить отображаемую панель и добавить панель, которую вы хотите отобразить на панели содержимого кадра.

Вам необходимо добавить ActionListener ккаждый пункт меню для того, чтобы вызвать соответствующее изменение во время щелчка по пункту меню.

Это действительно базовая функциональность Swing.Вы должны прочитать Swing Tutorial .

4 голосов
/ 22 февраля 2011

Образец для вас, я только что сделал, чтобы освежить свои знания свинга ..

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;

public class FrmChange extends JFrame{

private JPanel panel1 = new JPanel();
private JPanel panel2 = new JPanel();

public FrmChange(){
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    initMenu();
    panel1.setBackground(Color.BLUE);
    panel2.setBackground(Color.RED);
    setLayout(new BorderLayout());
}

private class MenuAction implements ActionListener {

    private JPanel panel;
    private MenuAction(JPanel pnl) {
        this.panel = pnl;
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        changePanel(panel);

    }

}

private void initMenu() {
    JMenuBar menubar = new JMenuBar();
    JMenu menu = new JMenu("Menu");
    JMenuItem menuItem1 = new JMenuItem("Panel1");
    JMenuItem menuItem2 = new JMenuItem("Panel2");
    menubar.add(menu);
    menu.add(menuItem1);
    menu.add(menuItem2);
    setJMenuBar(menubar);
    menuItem1.addActionListener(new MenuAction(panel1));
    menuItem2.addActionListener(new MenuAction(panel2));

}

private void changePanel(JPanel panel) {
    getContentPane().removeAll();
    getContentPane().add(panel, BorderLayout.CENTER);
    getContentPane().doLayout();
    update(getGraphics());
}

public static void main(String[] args) {
    FrmChange frame = new FrmChange();
    frame.setBounds(200, 200, 300, 200);
    frame.setVisible(true);

}

}

4 голосов
/ 22 февраля 2011
frame.getContentPane().remove() or removeAll();

frame.getContentPane().add(allTheNewComponents);

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