我如何才能将JFrame内容更改为相应的点击?

时间:2011-02-22 11:11:08

标签: java swing

我正在使用java开发一个简单的桌面应用程序。有一个菜单栏,当用户点击菜单项1时,内容将变为表单A.当用户点击菜单项2时,内容将显示表单B.

我怎么能实现这个目标?

使用相同的窗口,只更改内容。

3 个答案:

答案 0 :(得分:5)

您可以使用CardLayout,或只是删除显示的面板,然后添加要显示框架内容窗格的面板。

您需要为每个菜单项添加ActionListener,以便在单击菜单项时触发相应的更改。

这是真正基本的Swing功能。您应该阅读Swing Tutorial

答案 1 :(得分:4)

frame.getContentPane().remove() or removeAll();

frame.getContentPane().add(allTheNewComponents);

frame.revalidate();
frame.repaint();

答案 2 :(得分:4)

为你准备一个样本,我只是为了更新我的摇摆知识..

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);

}

}