【java作业】GUI布局、菜单、事件

设计两个界面,不需要实现功能,在同一个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("界面切换");
    }
}

运行结果截图:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值