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 }
运行结果: