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

1my*_*myb 3 java swing

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

我怎么能实现这个目标?

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

Gur*_*oca 6

给你的一个样本,我只是为了刷新我的挥杆知识。

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

}
Run Code Online (Sandbox Code Playgroud)

}


JB *_*zet 5

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

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

这是真正基本的Swing功能.你应该阅读Swing Tutorial.