学习了Swing的容器,布局方式和组件的知识之后,我们就可以运用学习过的这些知识来做一个计算器界面了,具体怎么实现呢?接下来我们就来一起见证计算器界面从无到有,组件从少到多的过程。

1、首先需要创建一个窗体,用来存放计算器的按钮和文本框组件:

java的swing 的计算器 swing实现计算器_java


java的swing 的计算器 swing实现计算器_新建按钮_02

2、创建一个JPanel中间容器panel1,添加到窗体的上方(north),用来存放计算器的文本框,文本框内容居右对齐

java的swing 的计算器 swing实现计算器_java_03


java的swing 的计算器 swing实现计算器_新建按钮_04

3、创建一个JPanel中间容器panel2,添加到窗体的下方(south),用来存放计算器的加减乘除和数字按钮

java的swing 的计算器 swing实现计算器_新建按钮_05


java的swing 的计算器 swing实现计算器_java_06

4、做完之后发现字体和组件的大小不匹配,看起来不好看,我们来设置一下字体。

java的swing 的计算器 swing实现计算器_新建按钮_07

5、最终的成品如下:

java的swing 的计算器 swing实现计算器_文本框_08

6、代码如下:

Demo17_Calculator 类:

package swing;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Toolkit;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;
/**
 * 这个例子来布局一个计算器。
 * 计算器界面可以分成两部分,即显示区和键盘区。
 * 显示区可以使用文本框组件。
 * 键盘区则是由很多按钮组成,可以使用网格布局管理器。
 */
public class Demo17_Calculator extends JFrame{
	private JPanel contentPane;    //内容面板
    private JTextField textField;    //文本框
    public static void main(String[] args){
    	Demo17_Calculator frame=new Demo17_Calculator();
        frame.setVisible(true);
    }
    
    public Demo17_Calculator() {
    	setTitle("计算器");    //设置窗体的标题
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    //设置窗体退出时操作
        SwingUtils.setCenter(this);//设置窗体大小600*800并居中
        contentPane=new JPanel();    //创建内容面板
        contentPane.setLayout(new BorderLayout(0,0));    //设置内容面板为边界布局
        setContentPane(contentPane);    //应用内容面板
        JPanel panel1=new JPanel();    //新建面板用于保存文本框
        contentPane.add(panel1,BorderLayout.NORTH);    //将面板放置在边界布局的北部
        textField=new JTextField();    //新建文本框
        textField.setHorizontalAlignment(SwingConstants.RIGHT);    //文本框中的文本使用右对齐
        panel1.add(textField);    //将文本框增加到面板中
        textField.setColumns(50);    //设置文本框的列数是18
        textField.setPreferredSize(new Dimension(50, 80));
        JPanel panel2=new JPanel();    //新建面板用于保存按钮
        contentPane.add(panel2, BorderLayout.CENTER);    //将面板放置在边界布局的中央
        panel2.setLayout(new GridLayout(4,4,80,20));    //面板使用网格4X4布局
        panel2.setBorder(BorderFactory.createEmptyBorder(50, 80, 50, 80));
        JButton button01=new JButton("7");    //新建按钮
        panel2.add(button01);    //应用按钮
        JButton button02=new JButton("8");    //新建按钮
        panel2.add(button02);    //应用按钮
        JButton button03=new JButton("9");    //新建按钮
        panel2.add(button03);    //应用按钮
        JButton button04=new JButton("+");    //新建按钮
        panel2.add(button04);    //应用按钮
        JButton button05=new JButton("4");    //新建按钮
        panel2.add(button05);    //应用按钮
        JButton button06=new JButton("5");    //新建按钮
        panel2.add(button06);    //应用按钮
        JButton button07=new JButton("6");    //新建按钮
        panel2.add(button07);    //应用按钮
        JButton button08=new JButton("-");    //新建按钮
        panel2.add(button08);    //应用按钮
        JButton button09=new JButton("3");    //新建按钮
        panel2.add(button09);    //应用按钮
        JButton button10=new JButton("2");    //新建按钮
        panel2.add(button10);    //应用按钮
        JButton button11=new JButton("1");    //新建按钮
        panel2.add(button11);    //应用按钮
        JButton button12=new JButton("*");    //新建按钮
        panel2.add(button12);    //应用按钮
        JButton button13=new JButton("0");    //新建按钮
        panel2.add(button13);    //应用按钮
        JButton button14=new JButton(".");    //新建按钮
        panel2.add(button14);    //应用按钮
        JButton button15=new JButton("=");    //新建按钮
        panel2.add(button15);    //应用按钮
        JButton button16=new JButton("/");    //新建按钮
        panel2.add(button16);    //应用按钮
        button01.setFont(new Font("宋体", 1, 50));
        button02.setFont(new Font("宋体", 1, 50));
        button03.setFont(new Font("宋体", 1, 50));
        button04.setFont(new Font("宋体", 1, 50));
        button05.setFont(new Font("宋体", 1, 50));
        button06.setFont(new Font("宋体", 1, 50));
        button07.setFont(new Font("宋体", 1, 50));
        button08.setFont(new Font("宋体", 1, 50));
        button09.setFont(new Font("宋体", 1, 50));
        button10.setFont(new Font("宋体", 1, 50));
        button11.setFont(new Font("宋体", 1, 50));
        button12.setFont(new Font("宋体", 1, 50));
        button13.setFont(new Font("宋体", 1, 50));
        button14.setFont(new Font("宋体", 1, 50));
        button15.setFont(new Font("宋体", 1, 50));
        button16.setFont(new Font("宋体", 1, 50));
    }
}

SwingUtils类:

package swing;

import java.awt.Toolkit;

import javax.swing.JFrame;

public class SwingUtils {
	public static void setCenter(JFrame jf) {
		int screenWidth=Toolkit.getDefaultToolkit().getScreenSize().width;
		int screenHeight=Toolkit.getDefaultToolkit().getScreenSize().height; 
		int jframeWidth = 800;
		int jframeHeight = 600;
		jf.setBounds((screenWidth/2)-(jframeWidth/2), (screenHeight/2)-(jframeHeight/2), 
        		jframeWidth, jframeHeight);
	}
}