Java内部类的使用和实例化

标签 java swing user-interface inner-classes

前段时间我用 Java 编写了一个小型图像查看器/处理程序,如果您愿意的话,它是一个小型 Photoshop。

我希望有一个下拉菜单,我可以在其中选择我打开的图像中的哪一张“在桌面上”,即。显示和应用的方法。我希望图像的名称成为菜单中显示的 JMenuItem 的名称。我还希望在添加新图像时出现一个新按钮。

我对此疑惑了一段时间,最终提出了这个解决方案,这是一个新类,用于在添加图像时处理新按钮的创建。代码如下:

import java.awt.event.*;
import javax.swing.*;
import java.util.*;


public class ImageList{

    private ArrayList<JMenuItem> list;
    private ImageHandler main;
    private ImageLevel img;

    public ImageList() {}

    public void setHandler(ImageHandler hand) {
        main = hand;
        img = main.getImg1();
    }

    public void add(Buffer addi) {
        final String added = addi.getName();
        JMenuItem uusi = new JMenuItem(added);

        main.getMenu5().add(uusi);
        uusi.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                img.setBuffer(added);
                main.getScr().updateUI();
            }
        });
   }
}

这可以正常工作。对于这个站点,我将原始的芬兰语名称翻译成英文,想知道为什么我最初用芬兰语写它们......我很不擅长命名。

add 方法应该在程序运行时被多次调用。

我真正无法理解的是接口(interface) ActionListener 的内部类实现,即它的编译和工作原理。

如果我的界面上有两个按钮并且我希望它们做不同的事情,我需要两个内部类,一个对应一个,每个都有自己的接口(interface) ActionListener 的内部实现。但在我的代码中,有一个类似乎可以完成许多工作,一个编译的 .class 文件,但最终结果就像有很多一样。

有人可以就这个问题教育我吗?这段代码是一个类吗,新按钮是它的实例吗?他们是新类(class)吗?每个新按钮都应该有一个新的 .class 文件吗?等等……

最佳答案

通常,内部类在只调用一次的代码中实例化(例如,当您扩展 JPanel 并将 ActionListeners 添加到 JButton 时s 在构造函数中)。在这里,您在多次调用的方法中实例化一个内部类(如果我正确理解您的描述)。每次调用 add() 时,都会创建内部类的一个新实例。与命名类一样,只有一个类,但可能有很多实例。

关于Java内部类的使用和实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13420151/

相关文章:

python - 如何从字典键设置 tkinter 组合框的值

用于强调网站 UI 中的新功能或更改功能的 Javascript 库

java - 根据 SWT 所做的选择修改列表

java - Java BigInteger nextProbablePrime 方法如何工作?

java - Java中有没有 "noreturn"关键字

java - 方法 `actionPerformed()` 被执行多次(多于可数)

java - 在 JUnit 测试中模拟按键

java - 静态和动态语言中的依赖注入(inject)

java - 有没有办法使用 IntelliJ 重构 Set 初始化以使用 Set.of() ?

java - 如何使用 `ant run` 运行 Java Swing 应用程序?