【问题标题】:Java - can't seem to addActionListener to a class that contains JButton [closed]Java - 似乎无法将ActionListener 添加到包含 JButton 的类 [关闭]
【发布时间】:2013-08-26 16:43:25
【问题描述】:

所以我有这门课:

class Button extends JButton
{
    private int x;
    private int y;
    public Button(int x,int y, int size, JLayeredPane pane )
    {

        JButton b = new JButton();
        pane.add(b, new Integer(0));
        b.setBounds(x,y,size,size);

    }
}

这个,虽然没有做很多工作。但我希望它将ActionListener 添加到类中的jbutton 中。但我似乎无法让它发挥作用。如果我尝试在课堂之外添加它,它不会给出错误,但似乎也没有做任何事情。我已经尝试过各种各样的东西,比如传入 JFrame...

对于更多的上下文,这是一个扫雷游戏。 Jframe 也使用 LayeredPane

【问题讨论】:

  • 请澄清您的具体问题或添加其他详细信息以准确突出您的需要。正如目前所写的那样,很难准确地说出你在问什么。 (从标志对话框复制)
  • 如何调用addActionListener()
  • 同意你的问题很不清楚。请让我们更多地了解它到底是如何不工作的。我可以告诉你的一件事是这个类不应该扩展 JButton。
  • 在这种情况下似乎不需要扩展 JButton。除非您重写某些方法来更改行为,否则只需使用 JButton
  • 我推测您将ActionListener 附加到Button 的实例而不是您在构造函数中创建的实例

标签: java swing jbutton


【解决方案1】:

构造函数:

public Button(int x,int y, int size, JLayeredPane pane )
{
  //The whole premise of have a constructor that declares a JButton inside
  //a JButton doesn't really make any sense, but:
  super();

  JButton b = new JButton();
  pane.add(b, new Integer(0));
  b.setBounds(x,y,size,size);

  b.addActionListener( new ActionListener(){ 

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

这只是在您的 Buttons 构造函数中声明一个新的 JButton。

话虽如此,您似乎不了解您编写的代码是如何工作的。当您扩展 JButton 时,您将通过继承获得它的所有方法。 public Button() 是你的Button 类的构造函数,你不需要在里面声明一个JButton,Button 已经是一个JButton。您需要做的是,在另一个类中,执行 Button b = new Button(); 之类的操作,然后在按钮上声明您的 actionlistener。

查看这些资源以获取更多信息:

JButton api

How to use buttons

【讨论】:

  • 注意 Grammin 没有扩展 JButton!
  • 注意 Grammin 提供了一个构造函数。构造函数不扩展任何东西。也就是说,他的构造函数可能应该调用super
  • 感谢您的快速回复。是的,我尝试了很多东西,然后很困惑,然后开始不必要地扩展课程。行 b.addActionListener(new ActionListener ... 正是我想要的。非常感谢。通常在添加按钮时我会去: addActionListener(this) 因为它在 JFrame 子类中......永远不知道该怎么做
  • 记住...隐式调用super()
  • @user2718803 它的导入以了解为什么“this”在这种情况下不起作用。你也应该阅读这份文件docs.oracle.com/javase/tutorial/uiswing/events/…
【解决方案2】:

还有更多方法可以做到这一点。

我建议你在第 4 页和第 5-6 页看到 http://www.cs.columbia.edu/~bert/courses/1007/slides/Lecture6.pdf 这是两个例子,可以解释你怎么做

【讨论】:

    猜你喜欢
    • 2013-10-06
    • 2023-02-02
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    相关资源
    最近更新 更多