【Java程序设计】GUI程序设计(设计封装矩形类、利用监听事件对textField进行读取和输入)

题目要求

在这里插入图片描述

设计如下

  • 思路

   整体布局采用GridLayout的方式,将界面分为3行,一列(GridLayout(3,1)),顶部布局采用GridLayout(2,2)的方式,包含JLabel标签作为提示,及JTextField输入框。中间布局采用GridLayout(1,2),包含JLabel标签和JTextField,且JTextField不允许用户输入。底部布局采用FlowLayout的方式,包含一个JButton控件。
  做一个Rectangle的封装类,含有length和width两个属性,有三个方法:设置length和width,输出周长,输出面积。
  给Button添加监听事件,用户未输入数据或输入的数据不完整,监听事件可以直接判断出来,在结果框里显示“请输入数据!”,若输入完整,则在监听事件内给Rectangle类进行赋值后调用Rectangle的周长面积函数来输出。

  • 源代码
package GUItest;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class experiment {
    public static class Rectangle{//封装的矩形类
        private double length;
        private double width;
        public void setlandw(double l,double w){
            length = l;
            width = w;
        }
        public double perimeter(){
            return (length+width)*2;
        }
        public double area(){
            return length*width;
        }
    }
    public static class Frame extends JFrame {
        //定义三个布局
        private JPanel paneltop = new JPanel();
        private JPanel panelmiddle = new JPanel();
        private JPanel panelbottom = new JPanel();
        //定义GUI中要用到的组件
        private JLabel labellength = new JLabel("长度:");
        private JLabel labelwidth = new JLabel("宽度:");
        private JTextField textlength = new JTextField();
        private JTextField textwidth = new JTextField();
        private JLabel labelresult = new JLabel("结果:");
        private JTextField textresult = new JTextField();
        private JButton button = new JButton("求值");
        

        // 写监听事件
        public class Mybuttonlistener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub
            String l = textlength.getText();//获取两个单行文本中的内容
            String w = textwidth.getText();
            double length = Double.parseDouble(l);
            double width = Double.parseDouble(w);
            if(l.isEmpty()||w.isEmpty()){//如果未输入完整则要求输入数据
                textresult.setText("请输入正确数据!");
            }
            else{
                Rectangle rectangle = new Rectangle();
                rectangle.setlandw(length,width);
                textresult.setText("周长为:"+rectangle.perimeter()+"面积为:"+rectangle.area());
            }            
        }
    }
    
        //构造函数
        Frame() {
            setTitle("计算矩形的周长和面积");
            setSize(500, 200);
            setLocation(400, 400);

            // 整体布局
            setLayout(new GridLayout(3, 1));
            add(paneltop);
            add(panelmiddle);
            add(panelbottom);

            // 顶部布局
            paneltop.setLayout(new GridLayout(2, 2));
            paneltop.add(labellength);
            paneltop.add(textlength);
            paneltop.add(labelwidth);
            paneltop.add(textwidth);

            // 中间布局
            panelmiddle.setLayout(new GridLayout(1, 2));
            panelmiddle.add(labelresult);
            panelmiddle.add(textresult);
            textresult.setEditable(false);

            // 底部布局
            panelbottom.setLayout(new FlowLayout());
            panelbottom.add(button);
            button.addActionListener(new Mybuttonlistener());
            
            setVisible(true);
        }
    }
    public static void main(String[] args){
        Frame frame = new Frame();
    }
}

  • 测试数据
    测试1:
    在这里插入图片描述
    测试2:
    在这里插入图片描述
    测试3:
    在这里插入图片描述
  • 小结

通过这个GUI实验,我理解最多的就是控制文本区域的禁止输入使用setEditable(false);在文本区域输出东西使用setText(“内容”)函数。以及监听事件的具体使用,使用监听事件时候要注意重载,要不然程序就会报错。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值