1、实验12图形用户界面实验12 图形用户界面一、 实验目的1. 掌握GUI开发的基本过程2. 能够根据要求,选择合适的布局管理器和相应组件完成页面的布局3. 理解事件响应机制,掌握事件编程二、实验题目1、完成课本171-172页的选择题和填空题2、完成173页编程题的第4题3、下面是一个计算器实现的代码,有兴趣的同学可以进行阅读和分析import java.awt.BorderLayout;import java.awt.Color;import java.awt.FlowLayout;import java.awt.GridLayout;import java.awt.event.Action
2、Event;import java.awt.event.ActionListener;import java.text.DecimalFormat;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JTextArea;import javax.swing.JTextField;public class cal implements ActionListener / 导入动作监听接口 / 设计面板中的
3、单位 JFrame frame; JTextField textAnswer; JPanel panel1, panel2, panel3; JLabel labelMemSpace; JButton buttonBk, buttonCe, buttonC; JButton button; JButton buttonDot, buttonAddAndSub, buttonAdd, buttonSub, buttonMul, buttonDiv, buttonMod; JButton buttonSqrt, buttonDao, buttonEqual; DecimalFormat df; /
4、 设置数据输出精度 boolean clickable; / 控制当前能否按键 double vard, answerd; / 用来保存double型数据的中间值(vard)和最后结果(answerd) short key = -1, prekey = -1; / key用来保存当前进行何种运算,prekey用来保存前次进行何种运算 String copy; / 做复制用 JTextArea help; / 帮助 / 构造函数 public cal() clickable = true; answerd = 0; frame = new JFrame(计算器); df = new Decima
5、lFormat(0.#); / 设置数据输出精度(对于double型值) textAnswer = new JTextField(15); textAnswer.setText(); textAnswer.setEditable(false); textAnswer.setBackground(new Color(255, 255, 255); panel1 = new JPanel(); panel2 = new JPanel(); frame.getContentPane().add(panel1); panel1.setLayout(new BorderLayout(); / 设计整个面
6、板 panel1.add(textAnswer, BorderLayout.NORTH); labelMemSpace = new JLabel( ); buttonBk = new JButton(Backspace); buttonBk.setForeground(new Color(255, 0, 0); buttonCe = new JButton(CE); buttonCe.setForeground(new Color(255, 0, 0); buttonC = new JButton(C); buttonC.setForeground(new Color(255, 0, 0);
7、buttonBk.addActionListener(this); buttonCe.addActionListener(this); buttonC.addActionListener(this); panel1.add(panel2, BorderLayout.CENTER); panel2.setLayout(new FlowLayout(FlowLayout.RIGHT); panel2.add(labelMemSpace); panel2.add(buttonBk); panel2.add(buttonCe); panel2.add(buttonC); panel3 = new JP
8、anel(); panel1.add(panel3, BorderLayout.SOUTH); button = new JButton10; for (int i = 0; i button.length; i+) buttoni = new JButton(Integer.toString(i); buttoni.setForeground(new Color(0, 0, 255); buttonDot = new JButton(.); buttonDot.setForeground(new Color(0, 0, 255); buttonAddAndSub = new JButton(
9、+/-); buttonAddAndSub.setForeground(new Color(0, 0, 255); buttonAdd = new JButton(+); buttonAdd.setForeground(new Color(255, 0, 0); buttonSub = new JButton(-); buttonSub.setForeground(new Color(255, 0, 0); buttonMul = new JButton(*); buttonMul.setForeground(new Color(255, 0, 0); buttonDiv = new JBut
10、ton(/); buttonDiv.setForeground(new Color(255, 0, 0); buttonMod = new JButton(%); buttonMod.setForeground(new Color(0, 0, 255); buttonSqrt = new JButton(sqrt); buttonSqrt.setForeground(new Color(0, 0, 255); buttonDao = new JButton(1/x); buttonDao.setForeground(new Color(0, 0, 255); buttonEqual = new
11、 JButton(=); buttonEqual.setForeground(new Color(255, 0, 0); / 将所有行为与监听绑定 panel3.setLayout(new GridLayout(4, 5); panel3.add(button7); button7.addActionListener(this); panel3.add(button8); button8.addActionListener(this); panel3.add(button9); button9.addActionListener(this); panel3.add(buttonDiv); bu
12、ttonDiv.addActionListener(this); panel3.add(buttonSqrt); buttonSqrt.addActionListener(this); panel3.add(button4); button4.addActionListener(this); panel3.add(button5); button5.addActionListener(this); panel3.add(button6); button6.addActionListener(this); panel3.add(buttonMul); buttonMul.addActionLis
13、tener(this); panel3.add(buttonMod); buttonMod.addActionListener(this); panel3.add(button1); button1.addActionListener(this); panel3.add(button2); button2.addActionListener(this); panel3.add(button3); button3.addActionListener(this); panel3.add(buttonSub); buttonSub.addActionListener(this); panel3.ad
14、d(buttonDao); buttonDao.addActionListener(this); panel3.add(button0); button0.addActionListener(this); panel3.add(buttonAddAndSub); buttonAddAndSub.addActionListener(this); panel3.add(buttonDot); buttonDot.addActionListener(this); panel3.add(buttonAdd); buttonAdd.addActionListener(this); panel3.add(
15、buttonEqual); buttonEqual.addActionListener(this); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); / 设置各个按钮行为 public void actionPerformed(ActionEvent event) Object temp = event.getSource(); / 如果按下数据按钮,将按下的按钮代表的数据插入的当前文本框字符串之后 for (int i = 0; i = 9; i+) if
16、(temp = buttoni & clickable = true) textAnswer.setText(textAnswer.getText() + Integer.toString(i); / 按下.按钮时,判断当前文本框内字符串中含不含.,如果已含,则不允许再插入. if (temp = buttonDot & clickable = true) boolean isDot = false; if (textAnswer.getText().length() = 0) isDot = true; for (int i = 0; i textAnswer.getText().lengt
17、h(); i+) if (. = textAnswer.getText().charAt(i) isDot = true; break; if (isDot = false) textAnswer.setText(textAnswer.getText() + .); if (temp = buttonAdd | temp = buttonSub | temp = buttonMul | temp = buttonDiv) & clickable = true) / + if (temp = buttonAdd) switch (prekey) case 0: answerd += Double
18、.parseDouble(textAnswer.getText(); case 1: answerd -= Double.parseDouble(textAnswer.getText(); case 2: answerd *= Double.parseDouble(textAnswer.getText(); case 3: if (Double.parseDouble(textAnswer.getText() = 0) textAnswer.setText(除数不能为零); clickable = false; else answerd /= Double.parseDouble(textAn
19、swer.getText(); break; default: answerd = Double.parseDouble(textAnswer.getText(); textAnswer.setText(); prekey = key = 0; / - if (temp = buttonSub) switch (prekey) case 0: answerd += Double.parseDouble(textAnswer.getText(); case 1: answerd -= Double.parseDouble(textAnswer.getText(); case 2: answerd
20、 *= Double.parseDouble(textAnswer.getText(); case 3: if (Double.parseDouble(textAnswer.getText() = 0) textAnswer.setText(除数不能为零); clickable = false; else answerd /= Double.parseDouble(textAnswer.getText(); break; default: answerd = Double.parseDouble(textAnswer.getText(); textAnswer.setText(); preke
21、y = key = 1; / * if (temp = buttonMul) switch (prekey) case 0: answerd += Double.parseDouble(textAnswer.getText(); case 1: answerd -= Double.parseDouble(textAnswer.getText(); case 2: answerd *= Double.parseDouble(textAnswer.getText(); case 3: if (Double.parseDouble(textAnswer.getText() = 0) textAnsw
22、er.setText(除数不能为零); clickable = false; else answerd /= Double.parseDouble(textAnswer.getText(); break; default: answerd = Double.parseDouble(textAnswer.getText(); textAnswer.setText(); prekey = key = 2; / / if (temp = buttonDiv) switch (prekey) case 0: answerd += Double.parseDouble(textAnswer.getTex
23、t(); case 1: answerd -= Double.parseDouble(textAnswer.getText(); case 2: answerd *= Double.parseDouble(textAnswer.getText(); case 3: if (Double.parseDouble(textAnswer.getText() = 0) textAnswer.setText(除数不能为零); clickable = false; else answerd /= Double.parseDouble(textAnswer.getText(); break; default
24、: answerd = Double.parseDouble(textAnswer.getText(); textAnswer.setText(); prekey = key = 3; / = if (temp = buttonEqual & clickable = true) if (prekey = 5) if (key = 0) answerd += vard; textAnswer.setText(df.format(answerd); if (key = 1) answerd -= vard; textAnswer.setText(df.format(answerd); if (ke
25、y = 2) answerd *= vard; textAnswer.setText(df.format(answerd); if (key = 3) answerd /= vard; textAnswer.setText(df.format(answerd); else vard = Double.parseDouble(textAnswer.getText(); if (key = 0) prekey = -1; answerd += Double.parseDouble(textAnswer.getText(); textAnswer.setText(df.format(answerd)
26、; if (key = 1) prekey = -1; answerd -= Double.parseDouble(textAnswer.getText(); textAnswer.setText(df.format(answerd); if (key = 2) prekey = -1; answerd *= Double.parseDouble(textAnswer.getText(); textAnswer.setText(df.format(answerd); if (key = 3) prekey = -1; answerd /= Double.parseDouble(textAnsw
27、er.getText(); textAnswer.setText(df.format(answerd); prekey = 5; / 取余 if (temp = buttonMod & clickable = true) if (answerd = 0) String s = textAnswer.getText(); textAnswer.setText(s); else / 开根号 if (temp = buttonSqrt & clickable = true) String s = textAnswer.getText(); if (s.charAt(0) = -) textAnswer.setText(不能开根); clickable = false; else textAnswer.setText(Double.toString(java.lang.Math.sqrt(Double .parseDouble(textAnswer.getText(); / 求倒数 if (temp = buttonDao & clickable = true) String s = textAnswer
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2