在GUI界面设计中,经常会遇到一个问题就是当在菜单里选择一个选项后需要界面根据所选选项改变其界面内容,而原始方法则是将改变前的界面和改变后的界面的代码块写在同一个类中,以达到同一界面的管理工作。但是这种方法适合于只有一两个界面代码的情况,如果有多个界面,那么将会使得该类中出现过于臃肿的代码块。这里介绍一种方法,一个类即是一个界面,界面中的相关操作也在该类中进行。而只需要一个实现了JFrame的类来管理所有的界面。
首先,创建一个实现了JFrame的主类,GUI的主界面则在该类中书写。在初始界面中有一个文本框,里面写有“切换前的界面”。在切换后的界面中有一个文本框,其中写有“切换后的界面”。点击菜单中的“初始”和“后来”可以分别向初始界面和后来界面切换。初始界面的代码块如下:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class WindowInitial extends JFrame implements ActionListener
{
JPanel panel;
JTextField text;
JMenuBar bar;
JMenu menu;
JMenuItem itemInitial , itemChange;
FlowLayout layout = new FlowLayout();
WindowChange change;
WindowInitial(){
init();
setBounds(100,100,200,200);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void init(){
bar = new JMenuBar();
menu = new JMenu("菜单");
itemInitial = new JMenuItem("初始");
itemChange = new JMenuItem("后来");
panel = new JPanel();
text = new JTextField(10);
change = new WindowChange();
text.setText("切换前的界面");
text.setEditable(false);
itemInitial.addActionListener(this);
itemChange.addActionListener(this);
bar.add(menu);
menu.add(itemInitial);
menu.add(itemChange);
panel.setLayout(layout);
add(panel);
panel.add(text);
setJMenuBar(bar);
}
public void actionPerformed(ActionEvent e){
if(e.getSource() == itemChange){//改变图形化界面为“后来”的界面。
panel.removeAll();
panel.add("后来" , change);//切换代码。
panel.validate();
repaint();
}
else if(e.getSource() == itemInitial){//改变图形化界面为“初始”界面。
panel.removeAll();
panel.add(text);
panel.validate();
repaint();
}
}
}
这里“初始”界面在WindowInitial类中已经创建,因而可以直接使用。切换后的界面的代码块如下:import java.awt.*;
import javax.swing.*;
public class WindowChange extends JPanel
{
JTextField text;
WindowChange(){
text = new JTextField(10);
text.setText("切换后的界面");
text.setEditable(false);
add(text);
}
}
主类的代码块如下:public class WindowTest
{
public static void main(String args[]){
WindowInitial wi = new WindowInitial();
wi.setTitle("界面切换");
}
}
运行结果如下所示: