【问题标题】:Invoke method from ActionListener从 ActionListener 调用方法
【发布时间】:2014-04-30 23:27:53
【问题描述】:

我想要一个按钮,当按下时,一个方法将被调用。 这是一些代码

public class Tester extends JPanel {              
    public void paintComponent(Graphics g){
        super.paintComponent(g);            
        g.fillRect(10, 10, 10, 10);

    }
    //The method which I wand invoke but can't, I don't know why.
    void setWidth(){
        //width -= 10 ;
        repaint();
    }

    public static void main(String[] args) {
            //Here some JFrame...
            Tester paint = new Tester();
            frame.add(paint);
            JButton click = new JButton("Click");

            click.addActionListener(new ActionListener(){

                @Override
                public void actionPerformed(ActionEvent e) {
                    paint.setWidth();//Here I Want invoke that method
                }

            });
    }
}

我希望ActionListener 将调用方法setWidth(),但它没有。不知道为什么。

【问题讨论】:

  • 好吧,对于初学者来说,在您显示的代码中,您不会将侦听器添加到按钮。此外,您不会将按钮添加到任何内容。
  • @VinceEmigh 为什么说他不添加监听器?对我来说,这似乎很完美。好吧,您的第二个注释是正确的。

标签: java


【解决方案1】:

paint 变量不在匿名 ActionListener 类的范围内尝试更改 paint 类以使其实现 ActionListener 接口并使其实例成为“单击”按钮的动作侦听器,也可以像这样将按钮附加到面板实例:

public class Tester extends JPanel implements ActionListener {              

   @Override
   public void actionPerformed(ActionEvent e) {
         setWidth();
   }

    public static void main(String[] args) {
            //Here some JFrame...
            Tester paint = new Tester();            
            frame.add(paint);

            JButton click = new JButton("Click");
            paint.add(click);
            click.addActionListener(paint);

    }
}

【讨论】:

    猜你喜欢
    • 2013-08-03
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 2014-04-01
    • 1970-01-01
    • 2013-01-01
    相关资源
    最近更新 更多