學了一段時間,終於開始嘗試寫自己的計算器了。
分成兩部分來完成,一是界面的實現;而是核心功能的實現。今天先來第一部分,界面。
目錄
概要設計
簡要說明
窗體中裝了一個自己的面板,這個面板是邊界佈局的,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();
}
}
界面基本完成,下一篇開始實現各個按鈕以及計算功能