【JAVA Swing】利率计算(图形界面)

1. 编程题目书写

 

2. 编程思路

从所显示界面分析,我选择用BorderLayout布局来实现。

页面北部用FlowLayout布局显示三个标签“本金”,“年利率”及“利息小计”。

       页面中部用FlowLayout布局显示与标签相对应的六个文本框与“利息合计”标签及其文本框,其中利息小计与合计文本框设置为不可编辑。

       页面南部用FlowLayout布局显示“计算”和“结束”两个按钮。

为实现其功能,需给“计算”“结束”按钮增加相应监听器。

监听器功能实现:

 

1. 输入值,点击“计算”,判断输入值是否有效(是否为数字,是否大于0),若无效则弹出消息对话框提示用户。

    

2. 输入值,点击“计算”,正常计算显示利息。

3.点击“结束”则退出程序。

3. 遇到的问题及解决

  1. 大体布局的设置,以为可以直接将各组件添加到BorderLayout布局中,结果出错,于是搜索后采用先将各组件添加到JPanel中,再添加到对应位置。
  2. 监听器用外部类实现,需要声明一个对象比如view来访问其它类成员。
  3. 文本框输入需要用getText()返回字符串,并用Double.parseDouble()来转化计算,计算完成后需再次用String.valueOf()转化,并用setText显示运算结果。
  4. 如果用户输入值无效,则需要用JOptionPane.showMessageDialog(),来弹出消息对话框提示。
  5. 为减少代码量,用匿名内部类单独实现了“结束”按钮的监听器,学习并熟悉了此方法。

4. 总结

熟悉了外部类实现图形界面功能的大体框架及方法,能够根据图片需求分析大体布局,学习并掌握了一些构造图形界面的细节与方法,学习到了匿名内部类实现监听器的方法,能够将程序功能实现做得较为完善,对用户更加友好方便。

5. 代码实现

5.1 InterestCalculator.java

package mypackage;

public class InterestCalculator{
    public static void main(String[] args) {
        WindowCalculator win = new WindowCalculator();
    }
}

5.2 WindowCalculator.java

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

public class WindowCalculator extends JFrame {
    public JTextField principal1, principal2, interest1, interest2, rate1, rate2, sum;
    public JButton button1, button2;
    PoliceListen listener;
    
    public WindowCalculator() {
        setSize(500, 300);
        setLocationRelativeTo(null);
        setLayout(new BorderLayout());
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel1 = new JPanel(new FlowLayout(FlowLayout.LEFT, 95, 5));
        JPanel panel2 = new JPanel(new FlowLayout(FlowLayout.CENTER));
        JPanel panel3 = new JPanel(new FlowLayout(FlowLayout.CENTER));
        
        button1 = new JButton("计算");
        button2 = new JButton("结束");
        principal1 = new JTextField(15);
        principal2 = new JTextField(15);
        interest1 = new JTextField(15);
        interest1.setEditable(false);
        interest2 = new JTextField(15);
        interest2.setEditable(false);
        rate1 = new JTextField(15);
        rate2 = new JTextField(15);
        sum = new JTextField(15);
        sum.setEditable(false);
        
        listener = new PoliceListen();
        listener.setView(this);
        button1.addActionListener(listener);
        
        button2.addActionListener((ActionListener) new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });
        
        panel1.add(new JLabel("本金"));
        panel1.add(new JLabel("年利率"));
        panel1.add(new JLabel("利息小计"));
        add(panel1, BorderLayout.NORTH);
        
        panel2.add(principal1);
        panel2.add(rate1);
        panel2.add(interest1);
        panel2.add(principal2);
        panel2.add(rate2);
        panel2.add(interest2);
        panel2.add(new JLabel("利息合计"));
        panel2.add(sum);
        add(panel2, BorderLayout.CENTER);
        
        panel3.add(button1);
        panel3.add(button2);
        add(panel3, BorderLayout.SOUTH);
    }
}

5.3 PoliceListen.java

package mypackage;
import java.awt.event.*;

import javax.swing.JOptionPane;

public class PoliceListen implements ActionListener{
    WindowCalculator view;
    
    public void setView(WindowCalculator view) {
        this.view = view;
    }
    
    public void actionPerformed(ActionEvent e) {
        try {
            double principal1 = Double.parseDouble(view.principal1.getText());
            double principal2 = Double.parseDouble(view.principal2.getText());
            double rate1 = Double.parseDouble(view.rate1.getText());
            double rate2 = Double.parseDouble(view.rate2.getText());
            
            if (principal1 < 0 || principal2 < 0 || rate1 < 0 || rate2 < 0) {
            	JOptionPane.showMessageDialog(view, "请输入有效的数值", "错误", JOptionPane.ERROR_MESSAGE);
            } else {
                double interest1 = principal1 * rate1;
                double interest2 = principal2 * rate2;
                double sum = interest1 + interest2;
                view.interest1.setText(String.valueOf(interest1));
                view.interest2.setText(String.valueOf(interest2));
                view.sum.setText(String.valueOf(sum));
            }
        } catch (NumberFormatException exp) {
        	JOptionPane.showMessageDialog(view, "请输入有效的数值", "错误", JOptionPane.ERROR_MESSAGE);
        }
    }
}
  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

布凯彻-劳斯基

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值