票务阶段考试

1、计算器布局

分析:计算器窗口主要由上下两部分组成,使用Frame默认的BorderLayout布局方式。北部使用Panel装载-一 个保存计算结果的文本框;中部使用Panel装载计算器的20个按钮,采用GridLayout布局。为了维持布局方式,禁止改变Frame的大小。将计算器20个按钮上的符号初始化在一个 String字符串中,创建按钮时从中截取相应的字符。构建GUI时通常这样划分代码:将组件定义为属性;在构造方法中构建组件;自定义init()方法设置布局;在show()方法中设置GUI的显示属性。

书上源码有错误,错误代码:

票务阶段考试

修正后,正确代码:

票务阶段考试

 

源码如下:

 

 1 import java.awt.*;
 2 
 3 public class AWTCalculation {
 4     
 5     //全局变量
 6     private Frame frame;
 7     private TextField field;
 8     private Button[] allButtons;
 9     
10     //构造方法用于创建组件并对其初始化
11     //生成并初始化对象
12     public AWTCalculation(){
13         frame = new Frame("票务专用计算器"); //设置窗口名称
14         field = new TextField(20);   //20表示文本宽度,此文本框只接收20个字符
15         allButtons = new Button[20]; //20个按钮
16         String str = "←C√±789/456*123-0.=+";
17         for(int i = 0; i < str.length(); i++){
18             allButtons[i] = new Button(str.substring(i,i+1)); //substring()字符串截取函数
19         }
20     }
21     //初始化窗口,设置布局
22     private void init(){
23         //北部面板(上方面板放置文本框)
24         Panel northPanel = new Panel();
25         northPanel.add(field);
26         //中部面板(放置计算器按钮)
27         Panel centerPanel = new Panel();
28         GridLayout grid = new GridLayout(5,4,10,10); //5行4列,上下间距10个像素
29         centerPanel.setLayout(grid);
30         for(int i = 0; i < allButtons.length; i++){
31             centerPanel.add(allButtons[i]);
32         }
33         //将面板添加到窗口
34         frame.add(northPanel,BorderLayout.NORTH);
35         frame.add(centerPanel,BorderLayout.CENTER);
36     }
37     
38     //设置窗口的显示属性
39     public void showMe(){
40         init();
41         frame.pack(); //设置窗口的最佳大小
42         frame.setLocation(300,200); //设置窗口显示初始位置
43         frame.setResizable(true); //允许改变窗口的大小,false禁止改变大小
44         frame.setVisible(true);  //显示窗口
45     }
46     
47     public static void main(String[] args){
48         new AWTCalculation().showMe();
49     }
50 }

 

运行结果:

票务阶段考试

 

票务阶段考试

上一篇:AtCoder Beginner Contest 160 题解


下一篇:【shapely】【投影变换】