设计两个界面,不需要实现功能,在同一个frame中利用菜单切换两个界面。
文件结构如下:
代码如下:
/*java第十一周实验
*wyc@Orion233
*JNU 计科1604 2018-04-24
*/
//CalculatorFrame.java
package window;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class CalculatorFrame extends JPanel {
private JButton[] keys;
private JPanel keyPadJPanel;
private JTextField lcdJTextField;
// constructor sets up GUI
public CalculatorFrame(){
//super("Calculator");
lcdJTextField = new JTextField(20);
lcdJTextField.setEditable(true);
keys = new JButton[16]; //按钮布局4*4
setLayout(new BorderLayout());
// 数字按钮的初始化
String sign = "789/456*123-0.=+";
Font bottonFont = new Font("Consolas",Font.BOLD,40);//设置统一字体
for(int i=0;i<16;i++) {
char c = sign.charAt(i);
keys[i] = new JButton(String.valueOf(c));
keys[i].setFont(bottonFont);
if((i+1)%4!=0) {
keys[i].setForeground(Color.BLACK );
keys[i].setBackground(Color.LIGHT_GRAY);
}
else {
keys[i].setForeground(Color.WHITE);
keys[i].setBackground(Color.ORANGE);
}
}
// 按钮网格布局
keyPadJPanel = new JPanel();
keyPadJPanel.setLayout(new GridLayout(4, 4));
//加入按钮 注意顺序
for(int i=0;i<16;i++) {
keyPadJPanel.add(keys[i]);
}
add(lcdJTextField, BorderLayout.NORTH);
add(keyPadJPanel, BorderLayout.CENTER);
}
} // end class CalculatorFrame
//Calculator.java
package window;
import java.awt.*;
import javax.swing.*;
public class Calculator extends CalculatorFrame {
public Calculator() {
//setLayout(new BorderLayout());
CalculatorFrame calculatorFrame = new CalculatorFrame();
//calculatorFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 设置大小
calculatorFrame.setSize(400, 650);
// 显示
calculatorFrame.setVisible(false);
}
}
//ColorSelectFrame.java
package window;
import java.awt.BorderLayout;
import java.awt.Font;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JPanel;
public class ColorSelectFrame extends JPanel {
private JButton okJButton;
private JButton cancelJButton;
private JCheckBox backgroundJCheckBox;
private JCheckBox foregroundJCheckBox;
private JComboBox<String> colorJComboBox;
private JPanel panel;
private JPanel panel2;
// constructor creates components and adds them to applet
public ColorSelectFrame() {
// super("ColorSelect");
setLayout(new BorderLayout());
//设置下拉选项条
colorJComboBox = new JComboBox<String>();
colorJComboBox.addItem("RED");
colorJComboBox.addItem("BLUE");
colorJComboBox.addItem("GREEN");
add(colorJComboBox, BorderLayout.NORTH);
panel = new JPanel(); // 创建panel
Font boxFont = new Font("Consolas",Font.BOLD,16);//设置统一字体
//设置勾选框
backgroundJCheckBox = new JCheckBox("Background");
backgroundJCheckBox.setFont(boxFont );
foregroundJCheckBox = new JCheckBox("Foreground");
foregroundJCheckBox.setFont(boxFont );
panel.add(backgroundJCheckBox);
panel.add(foregroundJCheckBox);
add(panel, BorderLayout.CENTER);
//设置按钮
okJButton = new JButton("Ok");
cancelJButton = new JButton("Cancel");
panel2 = new JPanel();
panel2.add(okJButton);
panel2.add(cancelJButton);
add(panel2, BorderLayout.SOUTH);
}
}
//ColorSelect.java
package window;
import java.awt.*;
import javax.swing.*;
public class ColorSelect extends ColorSelectFrame{
ColorSelect() {
ColorSelectFrame colorSelectFrame = new ColorSelectFrame();
//colorSelectFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
colorSelectFrame.setSize(400, 650);
colorSelectFrame.setVisible(false);
}
}
//ConbinedWindow.java
package window;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class CombinedWindow extends JFrame implements ActionListener {
JPanel panel;
JMenuBar bar;
JMenu menu;
JMenuItem itemCalculator,itemColorSelect;
BorderLayout layout = new BorderLayout();
Calculator card1;
ColorSelect card2;
public CombinedWindow() {
// TODO Auto-generated constructor stub
init();
setBounds(100, 100, 400, 600);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void init() {
bar = new JMenuBar();
menu = new JMenu("菜单");
itemCalculator = new JMenuItem("计算器");
itemColorSelect = new JMenuItem("颜色选择器");
panel = new JPanel();
card1 = new Calculator();
card2 = new ColorSelect();
itemCalculator.addActionListener(this);
itemColorSelect.addActionListener(this);
bar.add(menu);
menu.add(itemCalculator);
menu.add(itemColorSelect);
panel.setLayout(layout);
add(panel);
setJMenuBar(bar);
}
public void actionPerformed(ActionEvent e) {
if(e.getSource() == itemCalculator) {
panel.removeAll();
panel.add(card1);
panel.validate();
repaint();
}
else if(e.getSource() == itemColorSelect) {
panel.removeAll();
panel.add(card2);
panel.validate();
repaint();
}
}
}
//Test.java
package window;
public class Test {
public static void main(String args[]){
CombinedWindow wi = new CombinedWindow();
wi.setTitle("界面切换");
}
}
运行结果截图: