课本《Java大学实用教程(第二版)》 耿祥义 张跃平 编著
- package ch10;
- import java.awt.Color;
- import java.awt.Dimension;
- import java.awt.FlowLayout;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import javax.swing.Box;
- import javax.swing.JButton;
- import javax.swing.JFrame;
- import javax.swing.JOptionPane;
- import javax.swing.JTextField;
- /*
- *
- * 3.编写一个应用程序,设计4个按钮,分别命名为"加"、"减"、"乘"、"除";
- * 还有3个文本框,单击相应的按钮,将两个文本框的数字做运算,在第三个文本框中显示结果。
- *
- * */
- public class Ch10_3 {
- public static void main(String[] args) {
- new Key03();
- }
- }
- class Key03 implements ActionListener{
- private JButton jb1,jb2,jb3,jb4;//4个按钮,分别命名为"加"、"减"、"乘"、"除"
- private JTextField jt1,jt2,jt3; //3个文本框
- private JFrame jf;
- private Box box1,box2,basebox;
- public Key03(){
- jf=new JFrame("计算器v1.0");
- jf.setBounds(300, 300, 400, 130);
- jf.setVisible(true);
- jf.setLayout(new FlowLayout());//两行一列
- jb1=new JButton("加");
- jb2=new JButton("减");
- jb3=new JButton("乘");
- jb4=new JButton("除");
- jb1.addActionListener(this);
- jb2.addActionListener(this);
- jb3.addActionListener(this);
- jb4.addActionListener(this);
- jt1=new JTextField(" ");
- jt2=new JTextField(" ");
- jt3=new JTextField(" ");
- //对文本框进行设置大小
- Dimension dim2=new Dimension(100,20);
- jt1.setPreferredSize(dim2);
- jt2.setPreferredSize(dim2);
- jt3.setPreferredSize(dim2);
- jt3.setEditable(false); //不允许编辑
- jt3.setBackground(Color.gray);
- box1=Box.createHorizontalBox();
- box1.add(jt1);
- box1.add(Box.createHorizontalStrut(10));
- box1.add(jt2);
- box1.add(Box.createHorizontalStrut(10));
- box1.add(jt3);
- box2=Box.createHorizontalBox();
- box2.add(jb1);
- box2.add(Box.createHorizontalStrut(10));
- box2.add(jb2);
- box2.add(Box.createHorizontalStrut(10));
- box2.add(jb3);
- box2.add(Box.createHorizontalStrut(10));
- box2.add(jb4);
- basebox=Box.createVerticalBox();
- basebox.add(box1);
- basebox.add(Box.createVerticalStrut(10));
- basebox.add(box2);
- jf.add(basebox);
- jf.validate();
- jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- }
- public void actionPerformed(ActionEvent e) {
- String temp1=jt1.getText().trim();
- String temp2=jt2.getText().trim();
- if(temp1.equals("")||temp2.equals("")){//判断是否输入为空值。
- JOptionPane.showMessageDialog(jf,"文本框不能为空。");
- }else{
- double a=0,b=0;
- try{
- a=Double.parseDouble(temp1);
- b=Double.parseDouble(temp2);
- }catch(Exception e1){
- JOptionPane.showMessageDialog(jf,"您输入了非法字符,请输入正确的数字。");
- return ;//退出
- }
- if(e.getSource()==jb1){//+
- jt3.setText(""+(a+b));
- System.out.println(""+(a+b));
- }else if(e.getSource()==jb2){//减
- jt3.setText(""+(a-b));
- }else if(e.getSource()==jb3){//乘
- jt3.setText(""+(a*b));
- }else if(e.getSource()==jb4){//除
- jt3.setText(""+(a/b));
- }
- }
- }
- }
运行结果:
- package ch10;
- //编写有两个文本区的应用程序,当我们在一个文本区中输入若干个数时,另一个文本区同时对输入的数进行
- //求和运算并求出平均值,也就是说随着输入的变化,另一个文本区不断的变化。
- import java.awt.BorderLayout;
- import java.awt.GridLayout;
- import java.util.Vector;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- import javax.swing.JFrame;
- import javax.swing.JPanel;
- import javax.swing.JScrollPane;
- import javax.swing.JTextArea;
- import javax.swing.event.DocumentEvent;
- import javax.swing.event.DocumentListener;
- public class Ch10_5 {
- public static void main(String[] args) {
- new Key5();
- }
- }
- class Key5 implements DocumentListener{
- private JFrame jf;
- private JTextArea jta1,jta2;
- private Pattern p; //模式对象
- private Matcher m; //匹配对象
- public Key5(){
- jf=new JFrame("自动求和与算平均数");
- jta1=new JTextArea();
- jta2=new JTextArea();
- JPanel jp=new JPanel(new GridLayout(1,2));
- jp.add(new JScrollPane(jta1));
- jp.add(new JScrollPane(jta2));
- jf.add(jp,BorderLayout.CENTER);
- jf.validate();
- (jta1.getDocument()).addDocumentListener(this);
- jf.setBounds(200, 200, 400, 400);
- jf.setVisible(true);
- jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- }
- public void changedUpdate(DocumentEvent e) {
- System.out.println("2");
- jta2.setText(null);//置空
- String str=jta1.getText();
- //[^//s//d//p{Punct}]+
- p=Pattern.compile("[//p{Digit}]+"); //初始化模式对象
- m=p.matcher(str);
- Vector<Double> vec=new Vector<Double>(); //使用vector装载所匹配的对象。
- while(m.find()){
- String getS=m.group();
- vec.add(Double.parseDouble(getS));
- }
- if(vec!=null){
- double result=0;
- for(int i=0;i<vec.size();i++){
- result+=(Double)vec.get(i);
- }
- jta2.setText(null);
- jta2.append("总和为:"+result+"/n");
- jta2.append("平均数:"+result/vec.size());
- }
- }
- public void insertUpdate(DocumentEvent e) {
- changedUpdate(e);
- }
- public void removeUpdate(DocumentEvent e) {
- changedUpdate(e);
- }
- }
运行结果: