课本《Java大学实用教程(第二版)》 耿祥义 张跃平 编著
- packagech10;
- importjava.awt.Color;
- importjava.awt.Dimension;
- importjava.awt.FlowLayout;
- importjava.awt.event.ActionEvent;
- importjava.awt.event.ActionListener;
- importjavax.swing.Box;
- importjavax.swing.JButton;
- importjavax.swing.JFrame;
- importjavax.swing.JOptionPane;
- importjavax.swing.JTextField;
- /*
- *
- *3.编写一个应用程序,设计4个按钮,分别命名为"加"、"减"、"乘"、"除";
- *还有3个文本框,单击相应的按钮,将两个文本框的数字做运算,在第三个文本框中显示结果。
- *
- **/
- publicclassCh10_3{
- publicstaticvoidmain(String[]args){
- newKey03();
- }
- }
- classKey03implementsActionListener{
- privateJButtonjb1,jb2,jb3,jb4;//4个按钮,分别命名为"加"、"减"、"乘"、"除"
- privateJTextFieldjt1,jt2,jt3;//3个文本框
- privateJFramejf;
- privateBoxbox1,box2,basebox;
- publicKey03(){
- jf=newJFrame("计算器v1.0");
- jf.setBounds(300,300,400,130);
- jf.setVisible(true);
- jf.setLayout(newFlowLayout());//两行一列
- jb1=newJButton("加");
- jb2=newJButton("减");
- jb3=newJButton("乘");
- jb4=newJButton("除");
- jb1.addActionListener(this);
- jb2.addActionListener(this);
- jb3.addActionListener(this);
- jb4.addActionListener(this);
- jt1=newJTextField("");
- jt2=newJTextField("");
- jt3=newJTextField("");
- //对文本框进行设置大小
- Dimensiondim2=newDimension(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);
- }
- publicvoidactionPerformed(ActionEvente){
- Stringtemp1=jt1.getText().trim();
- Stringtemp2=jt2.getText().trim();
- if(temp1.equals("")||temp2.equals("")){//判断是否输入为空值。
- JOptionPane.showMessageDialog(jf,"文本框不能为空。");
- }else{
- doublea=0,b=0;
- try{
- a=Double.parseDouble(temp1);
- b=Double.parseDouble(temp2);
- }catch(Exceptione1){
- JOptionPane.showMessageDialog(jf,"您输入了非法字符,请输入正确的数字。");
- return;//退出
- }
- if(e.getSource()==jb1){//+
- jt3.setText(""+(a+b));
- System.out.println(""+(a+b));
- }elseif(e.getSource()==jb2){//减
- jt3.setText(""+(a-b));
- }elseif(e.getSource()==jb3){//乘
- jt3.setText(""+(a*b));
- }elseif(e.getSource()==jb4){//除
- jt3.setText(""+(a/b));
- }
- }
- }
- }
运行结果:
- packagech10;
- //编写有两个文本区的应用程序,当我们在一个文本区中输入若干个数时,另一个文本区同时对输入的数进行
- //求和运算并求出平均值,也就是说随着输入的变化,另一个文本区不断的变化。
- importjava.awt.BorderLayout;
- importjava.awt.GridLayout;
- importjava.util.Vector;
- importjava.util.regex.Matcher;
- importjava.util.regex.Pattern;
- importjavax.swing.JFrame;
- importjavax.swing.JPanel;
- importjavax.swing.JScrollPane;
- importjavax.swing.JTextArea;
- importjavax.swing.event.DocumentEvent;
- importjavax.swing.event.DocumentListener;
- publicclassCh10_5{
- publicstaticvoidmain(String[]args){
- newKey5();
- }
- }
- classKey5implementsDocumentListener{
- privateJFramejf;
- privateJTextAreajta1,jta2;
- privatePatternp;//模式对象
- privateMatcherm;//匹配对象
- publicKey5(){
- jf=newJFrame("自动求和与算平均数");
- jta1=newJTextArea();
- jta2=newJTextArea();
- JPaneljp=newJPanel(newGridLayout(1,2));
- jp.add(newJScrollPane(jta1));
- jp.add(newJScrollPane(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);
- }
- publicvoidchangedUpdate(DocumentEvente){
- System.out.println("2");
- jta2.setText(null);//置空
- Stringstr=jta1.getText();
- //[^//s//d//p{Punct}]+
- p=Pattern.compile("[//p{Digit}]+");//初始化模式对象
- m=p.matcher(str);
- Vector<Double>vec=newVector<Double>();//使用vector装载所匹配的对象。
- while(m.find()){
- StringgetS=m.group();
- vec.add(Double.parseDouble(getS));
- }
- if(vec!=null){
- doubleresult=0;
- for(inti=0;i<vec.size();i++){
- result+=(Double)vec.get(i);
- }
- jta2.setText(null);
- jta2.append("总和为:"+result+"/n");
- jta2.append("平均数:"+result/vec.size());
- }
- }
- publicvoidinsertUpdate(DocumentEvente){
- changedUpdate(e);
- }
- publicvoidremoveUpdate(DocumentEvente){
- changedUpdate(e);
- }
- }
运行结果: