zoukankan      html  css  js  c++  java
  • Java自学课程笔记10

    2021年3月14日17点21分
    JAVA自学课程笔记10:
        
        可输入的加法计算文本框1:
            TestTextField.java:
                /*版本1的main函数过长,不美观*/
                import java.awt.*;
                import java.awt.event.*;
    
                public class TestTextField{
                    public static void main(String[] args){
                        TextField tf1 = new TextField(30);
                        TextField tf2 = new TextField(30);
                        TextField tf3 = new TextField(30);
                        
                        Button bn = new Button("=");
                        Label lb = new Label("+");
                        Frame f = new Frame("文本框相加示例");
                        f.setLayout(new FlowLayout());
                        f.add(tf1);
                        f.add(lb);
                        f.add(tf2);
                        f.add(bn);
                        f.add(tf3);
    
                        MyMonitor aa = new MyMonitor();
                        bn.addActionListener(aa);
    
                        f.pack();
                        f.setVisible(true);
                    }
                }
    
                class MyMonitor implements ActionListener{
                    @Override
                    public void actionPerformed(ActionEvent e){
                        String str1 = TestTextField.tf1.getText();
                        String str2 = TestTextField.tf2.getText();
                        int num1 = Integer.parseInt(str1);
                        int num2 = Integer.parseInt(str2);
                        int num3 = num1 + num2;
    
                        String str3 = String.valueOf(num3);
                        TestTextField.tf3.setText(str3);
                    }
                }
        
        可输入的加法计算文本框2:
            TestTextField.java:
                /*对1程序美化修正且添加了关闭程序的功能*/
                import java.awt.*;
                import java.awt.event.*;
    
                public class TestTextField{
                    public static void main(String[] args){
                        new newTextField().launch();
                    }
                }
    
                class newTextField{
                    public TextField tf1, tf2, tf3;
    
                    public void launch(){
                        tf1 = new TextField(30);
                        tf2 = new TextField(30);
                        tf3 = new TextField(30);
                        
                        Button bn = new Button("=");
                        Label lb = new Label("+");
                        Frame f = new Frame("文本框相加示例");
                        f.setLayout(new FlowLayout());
                        f.add(tf1);
                        f.add(lb);
                        f.add(tf2);
                        f.add(bn);
                        f.add(tf3);
    
                        
                        bn.addActionListener(new MyMonitor(this));
                        f.addWindowListener(new MyMonitor(this));
    
                        f.pack();
                        f.setVisible(true);
                    }
                }
    
                class MyMonitor extends WindowAdapter implements ActionListener{
                    private newTextField tf;    //通过在B类中定义A类的属性,就可以达到在B类中访问A类成员的目的
                    public MyMonitor(newTextField tf){
                        this.tf = tf;
                    }
    
                    @Override
                    public void actionPerformed(ActionEvent e){
                        String str1 = tf.tf1.getText();
                        String str2 = tf.tf2.getText();
                        int num1 = Integer.parseInt(str1);
                        int num2 = Integer.parseInt(str2);
                        int num3 = num1 + num2;
    
                        String str3 = String.valueOf(num3);
                        tf.tf3.setText(str3);
                    }
    
                    @Override
                    public void windowClosing(WindowEvent e){
                        System.exit(-1);
                    }
                }
    
        内部类:
            内部类的方法可以访问外部类的所有成员。
            内部类可以直接当作外部类的成员。
            外部类的方法不可以直接访问内部类的成员。
    
            优点:
                可以让一个类方便的访问另一个类的所有成员。
                增加程序安全性,有效避免其他不相关外部类对该类的访问。
            例如,上面的计算文本框程序中的一个MyMonitor类可以作为newTextField的内部类,同时nexTextField的“new MyMonitor(this)”语句中的this可以不要。
    
        匿名类:
            较不规范,没有逻辑性。
            匿名类是一种特殊的内部类。
            
            Test:
                import java.awt.*;
                import java.awt.event.*;
    
                public class Test{
                    public static void main(String[] args){
                        Frame f = new Frame();
                        f.setSize(300, 300);
                        
                        f.addWindowListener(
                            new WindowAdapter(){
                                @Override
                                public void windowClosing(WindowEvent e){
                                    System.exit(-1);
                                }
                            }
                        );
                        
                        f.setVisible(true);
                    }
                }
    
            如果在一个方法内定义了一个匿名类,则该匿名类可以访问外部类的所有成员、包裹该匿名类的方法中的所有final类型局部变量。(非final类型的局部变量无法被匿名类访问。)
                Test:
                import java.awt.*;
                import java.awt.event.*;
    
                public class Test{
                    public static void main(String[] args){
                        final Frame f = new Frame();    //如果去掉final编译会报错
                        f.setSize(300, 300);
                        
                        f.addWindowListener(
                            new WindowAdapter(){
                                @Override
                                public void windowClosing(WindowEvent e){
                                    f.setVisible(false);    //匿名类只能调final类型局部变量
                                }
                            }
                        );
                        
                        f.setVisible(true);
                    }
                }
    
    
            实现接口:
                //其中A是接口。
                new A(){
                    //实现接口方法的代码
                };
                //功能:生成一个实现了A接口的匿名类的对象。
    
            实现抽象类:
                //其中A是抽象类。
                new A(){
                    //实现A中所有抽象方法的代码
                    //也可以添加自己的方法或属性代码
                }
                //功能:生成一个匿名类对象,该匿名类必须得实现A类的所有抽象方法,当然该匿名类也可以定义自己的属性和方法。
    
            继承父类:
                //其中A是类名。
                new A(){
                    //重写了A类的方法代码
                    //也可以添加自己的方法或属性代码
                }
                //功能:生成一个A类的子类对象,该匿名类继承了A的所有非private成员。
    
            如果一个类包含了很重要的逻辑,将来要经常修改,则这个类就不应当做匿名类来使用,匿名类会造成代码的混乱。
  • 相关阅读:
    【例题 6-21 UVA
    【例题 6-20 UVA
    【Codeforces Round #446 (Div. 2) C】Pride
    【Codeforces Round #446 (Div. 2) B】Wrath
    【Codeforces Round #446 (Div. 2) A】Greed
    【例题 6-19 UVA
    【CF675C】Money Transfers(离散化,贪心)
    【CF659E】New Reform(图的联通,环)
    【POJ1276】Cash Machine(多重背包单调队列优化)
    【HDU3507】Print Article(斜率优化DP)
  • 原文地址:https://www.cnblogs.com/yinjx/p/14647956.html
Copyright © 2011-2022 走看看