当前位置: 首页 > 知识库问答 >
问题:

如何在添加JComponent实例化到JContainer时添加ActionListener?

韶景曜
2023-03-14

我想通过以下方式添加组件:

frame。添加(新的JButton(“单击此处”)

但是我如何添加ActionListener呢?我想它可能与AbstractButton实例化有关?

我不想实例化JButton变量,所以我不确定这是否是正确的方法:

    frame.add(new JButton("Click here"), new AbstractButton() {
        public void addActionListener(ActionListener l) {
            // do stuff
        }
    });

如果这行得通,我需要它被添加到actionPerform()中,就像这样:

JButton button = new JButton("Click here");
button.addActionListener(this);

请注意,我并没有尝试为ActionListener创建匿名内部类,只是简化了代码,将组件添加到actionPerformed()。

有什么办法可以做到这一点吗?

谢谢


共有1个答案

阎俊英
2023-03-14

三种选择:

选项1:我认为最干净的

    JFrame frame = new JFrame();

    JButton button = new JButton("Click Here");
    frame.add(button);
    button.addActionListener(this);

选项2匿名类

    JFrame frame = new JFrame();

    JButton button = new JButton("Click Here");
    frame.add(button);

    button.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println("Clicked");
        }
});

选项3

这是不推荐的,丑陋且有意外的副作用(想象一下再次调用add)。但是你要求一种直接在add中实现的方法。

    JFrame frame = new JFrame();

    JButton button = new JButton("Click Here");
    frame.add(new JButton("Click Here"){
        @Override
        public void addActionListener(ActionListener l) {
            super.addActionListener(YourClass.this);
        }
    });
 类似资料:
  • 如果我创建一个继承JComponent的新类,我重写了JComponent的绘图Component(Graphics g)方法,通过使用g绘制一个圆圈,我应该修改什么才能使MouseListener仅在我单击组件的边界内时触发? 因为我在组件的构造函数中添加了setBounds(…)然后添加了一个MouseListener,但它会在我每次单击自定义组件所在容器中的任何位置时触发,而不仅仅是在我单击

  • 问题内容: 我目前正在运行ec2微型实例,但发现该实例有时会耗尽内存。 除了使用更大的实例大小之外,还可以做什么? 问题答案: 解决此问题的方法是向实例添加(即)空间。 分页通过在硬盘驱动器上创建一个区域并将其用于额外的内存来工作,该内存比普通内存要慢得多,但可用空间更多。 要为您的实例添加此额外空间,请输入: 如果您需要超过1024,则将其更改为更高的值。 要在重新启动后默认启用它,请将此行添加

  • 问题内容: 因此,标题非常简单。我有一个处理程序类,它实现了spring提供的接口。在这个类中,我将添加多个具有如下bean类设置的bean : 该方法返回的对象。 稍后,我将获取类实现的必需实例。所有这些都很好。当我要删除其中一个实例并在以后没有注册表实例的位置添加新实例时,就会出现问题。谁能帮我找到一种方法吗? 以下是该类的代码- 问题答案: 您可以利用(在此处查找API)动态删除或注册Bea

  • 问题内容: 我有一些arff文件。我想顺序阅读它们并创建一个大数据集。Instances.add(Instance inst)不会将字符串值添加到实例,因此尝试setDataset()…但即使失败。有没有办法完成直观上正确的字符串操作? 问题答案: 这是从邮件列表。我以前保存过 如何将两个数据文件a.arff和b.arff合并到一个数据列表中? 取决于您在说什么合并。您是否只想追加第二个文件(两个

  • 添加示例到Sandcastle在cesium编程入门(七)3D Tiles,模型旋转中提到过,这里是一份完整的说明 创建例子 开启node服务后打开 http://localhost:8080/Apps/Sandcastle/ 会自动跳到 hello world 示例 可以选择点击左上角的【New】按钮新建一个页面,也可以就在当前页面的【JavaScript code】面板中进行修改 如果需要添加