中南林业科技大学Java实验报告十一:Swing组件

简介: 中南林业科技大学Java实验报告十一:Swing组件

实验11 Swing组件

11.1 实验目的

  1. 了解Swing组件。
  2. 熟练掌握Swing组件的使用方法。

11.2 实验内容

实现一个可以进行两个数加减乘除的计算器。有两个输入框用以输入数字,屏幕有四个按钮分别为+、-、×、÷,在界面中显示结果。以加法为例如果输入的数字为1和3,则在界面中的输出结果为:1+3=4。在输入时要进行输入检查和异常处理;如果用户未输入两个数,要提示请输入数据,可以用文本提示也可以弹出对话框提示。(注意所有组件采用Swing的组件,控件可以根据需求和设计的不同增加)

11.2.1 代码

11.2.1.1 ScreenUtils类

import java.awt.*;
public class ScreenUtils {
    /*
        获取当前电脑屏幕的宽度
     */
    public static int getScreenWidth(){
        return Toolkit.getDefaultToolkit().getScreenSize().width;
    }
    /*
        获取当前电脑屏幕的高度
     */
    public static int getScreenHeight(){
        return Toolkit.getDefaultToolkit().getScreenSize().height;
    }
}

11.2.1.2 CalView类

import javax.swing.*;
import javax.swing.border.BevelBorder;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class CalView {
    JFrame jf = new JFrame("简易计算器");
    /**
     * 定义窗口的宽度
     */
    final int WIDTH = 600;
    /**
     * 定义窗口的高度
     */
    final int HEIGHT = 350;
    /**
     * 计算符号,计算值,计算结果
     */
    String method;
    double calValue1;
    double calValue2;
    double result;
    JTextField valueField1;
    JTextField valueField2;
    JTextField resField;
    /**
     * 组装视图
     */
    public void init() {
        //设置关闭窗口为结束程序
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //设置窗口相关的属性
        jf.setBounds((ScreenUtils.getScreenWidth() - WIDTH) / 2, (ScreenUtils.getScreenHeight() - HEIGHT) / 2, WIDTH, HEIGHT);
        //设置窗口大小不可变
        jf.setResizable(false);
        /*
            组装 value1 和 text1
         */
        Box valueBox1 = Box.createHorizontalBox();
        JLabel valueLabel1 = new JLabel("value1");
        //设置为10个长度大小
        valueField1 = new JTextField(10);
        valueBox1.add(valueLabel1);
        //设置水平间隔为20px
        valueBox1.add(Box.createHorizontalStrut(20));
        valueBox1.add(valueField1);
        /*
            组装 value2 和 text2
         */
        Box valueBox2 = Box.createHorizontalBox();
        JLabel valueLabel2 = new JLabel("value2");
        //设置为10个长度大小
        valueField2 = new JTextField(10);
        valueBox2.add(valueLabel2);
        //设置水平间隔为20px
        valueBox2.add(Box.createHorizontalStrut(20));
        valueBox2.add(valueField2);
        /*
            组装 valueBox1 和 valueBox2
         */
        Box valueBox12 = Box.createHorizontalBox();
        valueBox12.add(valueBox1);
        //设置水平间隔为40px
        valueBox12.add(Box.createHorizontalStrut(40));
        valueBox12.add(valueBox2);
        /*
           组装计算方式
         */
        Box methodBox = Box.createHorizontalBox();
        JLabel methodLabel = new JLabel("计算方式");
        JRadioButton addButton = new JRadioButton("+");
        JRadioButton subButton = new JRadioButton("-");
        JRadioButton mulButton = new JRadioButton("×");
        JRadioButton divButton = new JRadioButton("÷");
        ActionListener actionListener = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String actionCommand = e.getActionCommand();
                //得到当前选择的计算方式
                method = actionCommand;
            }
        };
        addButton.addActionListener(actionListener);
        subButton.addActionListener(actionListener);
        mulButton.addActionListener(actionListener);
        divButton.addActionListener(actionListener);
        //添加到同一个按钮组,实现单选效果
        ButtonGroup buttonGroup = new ButtonGroup();
        buttonGroup.add(addButton);
        buttonGroup.add(subButton);
        buttonGroup.add(mulButton);
        buttonGroup.add(divButton);
        methodBox.add(methodLabel);
        methodBox.add(Box.createHorizontalStrut(30));
        methodBox.add(addButton);
        methodBox.add(Box.createHorizontalStrut(20));
        methodBox.add(subButton);
        methodBox.add(Box.createHorizontalStrut(20));
        methodBox.add(mulButton);
        methodBox.add(Box.createHorizontalStrut(20));
        methodBox.add(divButton);
        /*
         * 组装运算组件
         */
        JButton runButton = new JButton("开始运算");
        runButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //清空结果文本域
                resField.setText("");
                if ("".equals(valueField1.getText()) || "".equals(valueField2.getText())) {
                    //说明有文本为空
                    JOptionPane.showMessageDialog(jf, "请输入数据", "提醒", JOptionPane.WARNING_MESSAGE);
                    return;
                }
                try {
                    calValue1 = Double.parseDouble(valueField1.getText().trim());
                    calValue2 = Double.parseDouble(valueField2.getText().trim());
                } catch (NumberFormatException ex) {
                    JOptionPane.showMessageDialog(jf, "检测到非正常数据", "提醒", JOptionPane.ERROR_MESSAGE);
                    return;
                }
                if (method == null) {
                    JOptionPane.showMessageDialog(jf, "请选择运算方式", "提醒", JOptionPane.WARNING_MESSAGE);
                    return;
                }
                switch (method) {
                    case "+":
                        result = calValue1 + calValue2;
                        break;
                    case "-":
                        result = calValue1 - calValue2;
                        break;
                    case "×":
                        result = calValue1 * calValue2;
                        break;
                    case "÷":
                        if (calValue2 == 0) {
                            JOptionPane.showMessageDialog(jf, "检测到非法运算(0作为分母)", "提醒", JOptionPane.ERROR_MESSAGE);
                            return;
                        }
                        result = calValue1 / calValue2;
                        break;
                }
                //在文本域中显示运算结果
                if(((result+"").matches(".*(\\.0)$"))){
                    resField.setText(valueField1.getText() + " " + method + " " + valueField2.getText() + " = " + (int)result);
                }else{
                    resField.setText(valueField1.getText() + " " + method + " " + valueField2.getText() + " = " + result);
                }
            }
        });
        Box runBox = Box.createHorizontalBox();
        runBox.add(runButton);
        /*
          组装计算结果
         */
        Box resBox = Box.createHorizontalBox();
        JLabel resLabel = new JLabel("计算结果");
        resField = new JTextField(40);
        resBox.add(resLabel);
        resBox.add(Box.createHorizontalStrut(30));
        resBox.add(resField);
        /*
         * 组装 valueBox12 methodBox resBox
         */
        Box viewBox = Box.createVerticalBox();
        viewBox.add(Box.createVerticalStrut(60));
        viewBox.add(valueBox12);
        viewBox.add(Box.createVerticalStrut(50));
        viewBox.add(methodBox);
        viewBox.add(Box.createVerticalStrut(50));
        viewBox.add(runBox);
        viewBox.add(Box.createVerticalStrut(50));
        viewBox.add(resBox);
        /*
         * 组装 viewBox 到面板
         */
        JPanel viewPanel = new JPanel();
        //设置背景颜色为青蓝色
        viewPanel.setBackground(new Color(153, 255, 255));
        //为panel设置边框 创建凸起的斜边框,分别设置四条边的颜色
        viewPanel.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED, Color.RED, Color.GREEN, Color.BLUE, Color.GRAY));
        viewPanel.add(viewBox);
        jf.add(viewPanel);
        //显示窗口可见
        jf.setVisible(true);
    }
}

11.2.1.3 CalApplication类

/**
 *主启动类
 */
public class CalApplication {
    public static void main(String[] args) {
        new CalView().init();
    }
}

11.2.2 演示


相关文章
|
1月前
|
存储 Java 关系型数据库
农产品管理系统【GUI/Swing+MySQL】(Java课设)
农产品管理系统【GUI/Swing+MySQL】(Java课设)
19 1
|
1月前
|
存储 Java 关系型数据库
个人成绩信息管理系统【GUI/Swing+MySQL】(Java课设)
个人成绩信息管理系统【GUI/Swing+MySQL】(Java课设)
21 0
|
1月前
|
存储 Java 关系型数据库
酒店管理系统【GUI/Swing+MySQL】(Java课设)
酒店管理系统【GUI/Swing+MySQL】(Java课设)
23 1
|
1月前
|
存储 Java 关系型数据库
社区医院管理服务系统【GUI/Swing+MySQL】(Java课设)
社区医院管理服务系统【GUI/Swing+MySQL】(Java课设)
26 1
|
1月前
|
存储 Java 关系型数据库
仓库管理系统【GUI/Swing+MySQL】(Java课设)
仓库管理系统【GUI/Swing+MySQL】(Java课设)
20 0
|
1月前
|
存储 Java 关系型数据库
游乐场管理系统【GUI/Swing+MySQL】(Java课设)
游乐场管理系统【GUI/Swing+MySQL】(Java课设)
17 0
|
1月前
|
存储 Java 关系型数据库
影碟出租管理系统【GUI/Swing+MySQL】(Java课设)
影碟出租管理系统【GUI/Swing+MySQL】(Java课设)
17 0
|
1月前
|
存储 Java 关系型数据库
实验室设备管理系统【GUI/Swing+MySQL】(Java课设)
实验室设备管理系统【GUI/Swing+MySQL】(Java课设)
19 0
|
1月前
|
存储 Java 关系型数据库
请销假管理系统【GUI/Swing+MySQL】(Java课设)
请销假管理系统【GUI/Swing+MySQL】(Java课设)
15 0
|
1月前
|
存储 Java 关系型数据库
某电力公司收费管理系统【GUI/Swing+MySQL】(Java课设)
某电力公司收费管理系统【GUI/Swing+MySQL】(Java课设)
16 0