Java内部类的使用和实例化

Val*_*eri 9 java user-interface swing inner-classes

前段时间我用Java编写了一个小图像查看器/处理程序,如果你愿意的话.

我希望有一个下拉菜单,我可以选择我打开的哪一个图像"在桌面上",即.显示和应用的方法.我希望图像的名称是菜单中显示的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();
            }
        });
   }
}
Run Code Online (Sandbox Code Playgroud)

这应该是正常的.对于这个网站,我把原来的芬兰名字翻译成了英文,想知道为什么我最初用芬兰语写这些名字......我很痴迷于命名.

在程序运行时,应该多次调用方法add.

我无法理解的是ActionListener接口的内部类实现,即它的编译及其工作原理.

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

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

Cod*_*ice 5

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