Swing实例——计算器

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

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

5、最终的成品如下:

在这里插入图片描述

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);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值