Java制作基于GUI计算器的界面
首先,我们需要知道GUI是什么东西,所谓GUI,全称为(Graphical User Interface),又称图形用户接口,或者是图形用户界面,其实就是指采用图形方式显示的计算机操作用户界面。
既然我们知道了GUI,然后我们就自然联想到了各种按钮,各种窗口图形,而这些东西,全部都包含在了java自带的Swing中,Swing,嗯,百度一下:Swing是一个用于开发Java应用程序用户界面的开发工具包。
至于我们如何去调用,在代码的开头附上一句:
import javax.swing.*;
就可以了。
在具体讲解之前,还需要了解一些Java中的一些词汇:
JFrame :它是屏幕上window的对象,能够最大化、最小化、关闭
JPanel :是一种轻量级容器,可以加入到JFrame窗体中
JTextArea :是一个文本框,可以显示文本
JButton : 是Java中的按钮,可以实现一些功能
讲了这么多废话,终于要开始了。
JFrame frame1 = new JFrame("calculate") ;
JPanel pan1 = new JPanel();//数字按钮
JPanel pan2 = new JPanel();//符号按钮
JTextArea nr1 = new JTextArea(1,10);//建立文本框
东西既然设置好了,总得设置个大小吧:
frame1.setSize(225,245);
pan1.setLayout(null);
pan1.setBounds(0,20,180,240);//建立容器1的大小
pan2.setLayout(null);
pan2.setBounds(180,30,60,240);//建立容器2的大小
上面的setLayout() 实际是指pan1的布局为啥样,我们设置为空,是为了下面的绝对坐标的使用。
框架既然已经大致出来了,没有按钮怎么行呢?
for(int i=0;i<=2;i++) {
for(int j=1;j<=3;j++) {
JButton but = new JButton(""+(3*i+j));
but.setBounds(60*(j-1),60*i,60,60);
pan1.add(but);
}
}
JButton but10 = new JButton("#");
but10.setBounds(0,180,60,60);
pan1.add(but10);
JButton but11 = new JButton("0");
but11.setBounds(60,180,60,60);
pan1.add(but11);
JButton but12 = new JButton("~");
but12.setBounds(120,180,60,60);
pan1.add(but12);
这样,我们就建立了1-9,九个按钮以及建立了0,#,~,这就完成了数字区域的按钮。紧接着,我们把容器二中的按钮也添加进去:
JButton jia = new JButton("+");
jia.setBounds(180,0,60,40);
JButton jian = new JButton("-");
jian.setBounds(180,40,60,40);
JButton chen = new JButton("*");
chen.setBounds(180,80,60,40);
JButton chu = new JButton("/");
chu.setBounds(180,120,60,40);
JButton qingkong = new JButton("清空");
qingkong.setBounds(180,160,60,40);
JButton dengyu = new JButton("=");
dengyu.setBounds(180,200,60,40);
pan2.add(jia);//在容器2中添加功能按钮
pan2.add(jian);
pan2.add(chen);
pan2.add(chu);
pan2.add(qingkong);
pan2.add(dengyu);
最后,我们还需要将整个window进行布局,你想嘛,上面只是确定了有哪些容器,却没有说到底怎么分布。
BorderLayout Bor = new BorderLayout(2,2);//进行布局
frame1.setLayout(Bor);
frame1.add(nr1,Bor.NORTH);
frame1.add(pan1,Bor.CENTER);
frame1.add(pan2,Bor.CENTER);
先给大家说明一下,java一共有好几种布局方式:
布局方式 | 解释: |
BorderLayout | 分为五块:东西南北中 |
FlowLayout | 类似段落 |
GirdLayout | 被分为等大矩形 |
BoxLayout | 额,怎么解释呢?类似于盒子进行排布 |
CardLayout | 类似于图层 |
frame1.setVisible(true) ;
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
给大家发个总的代码吧,最后了,第一次写博客,写的不好还请见谅。
package diqizhang;
import java.awt.BorderLayout;
import javax.swing.*;
public class calculate1{
public static void main(String[] args){
{
JFrame frame1 = new JFrame("calculate") ;
JPanel pan1 = new JPanel();//数字按钮
JPanel pan2 = new JPanel();//符号按钮
JTextArea nr1 = new JTextArea(1,10);//建立文本框
frame1.setSize(225,245);
pan1.setLayout(null);
pan1.setBounds(0,20,180,240);//建立容器1的大小
pan2.setLayout(null);
pan2.setBounds(180,30,60,240);//建立容器2的大小
//建立12个按钮
for(int i=0;i<=2;i++) {
for(int j=1;j<=3;j++) {
JButton but = new JButton(""+(3*i+j));
but.setBounds(60*(j-1),60*i,60,60);
pan1.add(but);}}
JButton but10 = new JButton("#");
but10.setBounds(0,180,60,60);
pan1.add(but10);
JButton but11 = new JButton("0");
but11.setBounds(60,180,60,60);
pan1.add(but11);
JButton but12 = new JButton("~");
but12.setBounds(120,180,60,60);
pan1.add(but12);
JButton jia = new JButton("+");
jia.setBounds(180,0,60,40);
JButton jian = new JButton("-");
jian.setBounds(180,40,60,40);
JButton chen = new JButton("*");
chen.setBounds(180,80,60,40);
JButton chu = new JButton("/");
chu.setBounds(180,120,60,40);
JButton qingkong = new JButton("清空");
qingkong.setBounds(180,160,60,40);
JButton dengyu = new JButton("=");
dengyu.setBounds(180,200,60,40);
pan2.add(jia);//在容器2中添加功能按钮
pan2.add(jian);
pan2.add(chen);
pan2.add(chu);
pan2.add(qingkong);
pan2.add(dengyu);
BorderLayout Bor = new BorderLayout(2,2);//进行布局
frame1.setLayout(Bor);
frame1.add(nr1,Bor.NORTH);
frame1.add(pan1,Bor.CENTER);
frame1.add(pan2,Bor.CENTER);
frame1.setVisible(true) ;
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
}
效果图:::::