• 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成员。
    
            如果一个类包含了很重要的逻辑,将来要经常修改,则这个类就不应当做匿名类来使用,匿名类会造成代码的混乱。
  • 相关阅读:
    NTFS 的默认簇大小
    磁盘管理中显示的磁盘顺序(磁盘0、磁盘1、磁盘2)与接口(sata、pci、nvme)之间的关系
    FastCopy可以拷贝文件保留原创建日期+几种模式
    三款数据恢复软件
    windows的存储池和存储空间(windows10新建好存储空间后,系统会根据分区容量的大小自动设置簇大小,如需更改,请到磁盘管理中删除分区后新建简单卷)
    响应式web原型设计工具——froont
    单个硬盘和软raid 0(windows 存储空间的存储池)性能对比(结果是差不多:()
    怎样使用工具更改磁盘簇大小
    存储空间概述(微软文档)
    申请微信商户API证书、设置AIPv2密钥\设置AIPv3密钥
  • 原文地址:https://www.cnblogs.com/yinjx/p/14647956.html
Copyright © 2020-2023  润新知