学了一段时间,终于开始尝试写自己的计算器了。
分成两部分来完成,一是界面的实现;而是核心功能的实现。今天先来第一部分,界面。
目录
概要设计
简要说明
窗体中装了一个自己的面板,这个面板是边界布局的,north位置是一个用来显示的label,center位置是一个装满按钮的面板panel;这个按钮面板panel是一个4*4的网格布局。
文件结构
当然结构不需要那么复杂,这只是我的个人习惯。
代码介绍
面板的设计代码
先总览:
package CaculatorFrame;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import CaculatorActionListener.NumberActionListener;
import CaculatorActionListener.OperaActionListener;
public class CaculatorPanel extends JPanel {
JLabel display; //用于显示按钮与运算结果的标签
JPanel panel; //用来装各个按钮的面板
//构造方法
public CaculatorPanel() {
this.setLayout(new BorderLayout()); //给面板设置边界布局
display=new JLabel("0"); //显示标签初始显示0
this.add(BorderLayout.NORTH,display);//往面板中添加标签
//下面是装按钮的面板
panel=new JPanel();
panel.setLayout(new GridLayout(4,4));
//两种监听器(是自己写的监听器类)
NumberActionListener nal=new NumberActionListener(); //操作数的监听器
OperaActionListener oal=new OperaActionListener(); //操作符的监听器
//给面板添加按钮
addButton("7",nal);
addButton("8",nal);
addButton("9",nal);
addButton("+",oal);
addButton("4",nal);
addButton("5",nal);
addButton("6",nal);
addButton("-",oal);
addButton("1",nal);
addButton("2",nal);
addButton("3",nal);
addButton("*",oal);
addButton("0",nal);
addButton(".",nal);
addButton("=",oal);
addButton("/",oal);
//把按钮面板添加进来
this.add(BorderLayout.CENTER,panel);
}
/**
* 自定义往按钮面板中添加按钮的方法
* @param s 按钮上显示的文本
* @param al 按钮添加的监听器
*/
void addButton(String s,ActionListener al) {
JButton btn=new JButton(s);
btn.addActionListener(al);
//把按钮添加到面板中
panel.add(btn);
}
}
在自己写的面板类中。装了用于显示的label标签以及一个以网格布局装16的按钮的面板。
其中,为了减少代码量,自定义了一个添加按钮的方法。
注:其中用到的两个监听器类是自己定义的,暂时只是定义以备用,其中需要实现的方法将在下一个环节——功能实现来书写
package CaculatorActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class NumberActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
}
package CaculatorActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class OperaActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
}
界面代码
package CaculatorFrame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
public class CaculatorFrame extends JFrame {
//构造方法
public CaculatorFrame() {
this.setTitle("计算器");
CaculatorPanel cp=new CaculatorPanel();
this.add(cp);
this.pack(); //自动调整宽高
this.addWindowListener(new WindowAdapter() {
public void WindowClosing(WindowEvent e) {
System.exit(0);
}
});
this.setVisible(true);
}
}
大部分主要的代码都写在了自己的面板类中了。frame类只需要将面板添加进来,并且进行一些常规的界面设置代码即可。
测试代码
下面是用于运行的测试代码
import CaculatorFrame.CaculatorFrame;
public class Caculator {
public static void main(String[] args) {
// TODO Auto-generated method stub
new CaculatorFrame();
}
}
界面基本完成,下一篇开始实现各个按钮以及计算功能