我正在使用java开发一个简单的桌面应用程序。有一个菜单栏,当用户点击菜单项1时,内容将变为表单A.当用户点击菜单项2时,内容将显示表单B.
我怎么能实现这个目标?
使用相同的窗口,只更改内容。
答案 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);
}
}