Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在一个类中定义按钮,在不同的类中定义侦听器?_Java - Fatal编程技术网

Java 如何在一个类中定义按钮,在不同的类中定义侦听器?

Java 如何在一个类中定义按钮,在不同的类中定义侦听器?,java,Java,我有两个java类:GLA14.java和NewFrame2.java。java有一个提交按钮。我想在GLA14.java中定义它的侦听器。如何做到这一点?您可以在GLA14中继承或实现侦听器,并使用setOnClickListenernew GLA14;方法来使用它。您可以继承或实现GLA14中的侦听器,并使用setOnClickListenernew GLA14;按钮的方法来使用它。您可以在NewFrame2中有一个方法,该方法将ActionListener对象作为参数。在NewFrame2

我有两个java类:GLA14.java和NewFrame2.java。java有一个提交按钮。我想在GLA14.java中定义它的侦听器。如何做到这一点?

您可以在GLA14中继承或实现侦听器,并使用setOnClickListenernew GLA14;方法来使用它。

您可以继承或实现GLA14中的侦听器,并使用setOnClickListenernew GLA14;按钮的方法来使用它。

您可以在NewFrame2中有一个方法,该方法将ActionListener对象作为参数。在NewFrame2中此方法的主体内,然后将其指定给按钮:

public class NewFrame2 {
    ...
    public void assignEventHandler(ActionListener listener) {
        this.button.addActionListener(listener);
    }
    ...
}
在你的报告14中:

...
Frame2 f2 = ...
f2.assignEventHandler(new EvtHlr());
...
其他一些类将执行实际事件处理:

public class EvtHlr implements ActionListener() {
    ...
}
也就是说,你所尝试的是非传统的。通常所做的是,您有:

将处理事件的匿名类,在声明按钮的同一类中声明。或 实现ActionListener的独立类,该类可由声明按钮的同一类访问,该类随后作为按钮的事件处理程序传递。
您可以在NewFrame2中有一个方法,它接受ActionListener对象作为参数。在NewFrame2中此方法的主体内,然后将其指定给按钮:

public class NewFrame2 {
    ...
    public void assignEventHandler(ActionListener listener) {
        this.button.addActionListener(listener);
    }
    ...
}
在你的报告14中:

...
Frame2 f2 = ...
f2.assignEventHandler(new EvtHlr());
...
其他一些类将执行实际事件处理:

public class EvtHlr implements ActionListener() {
    ...
}
也就是说,你所尝试的是非传统的。通常所做的是,您有:

将处理事件的匿名类,在声明按钮的同一类中声明。或 实现ActionListener的独立类,该类可由声明按钮的同一类访问,该类随后作为按钮的事件处理程序传递。
这似乎不是一个好主意,正如Aakash所建议的,您应该创建一个ListenerClass.java并同时使用GLA14.java和NewFrame2.java。 您还可以尝试在GLA14.java中编写侦听器的公共getter


希望对你有帮助

这似乎不是一个好主意,正如Aakash所建议的那样,您应该创建一个ListenerClass.java并同时使用GLA14.java和NewFrame2.java。 您还可以尝试在GLA14.java中编写侦听器的公共getter


希望对你有帮助

您可以使用frame类中的公共方法来实现这一点

public class NewFrame extends JFrame {

private JButton button; 
public  Solution() {
    button= new JButton("Test");
    Container contentPane = getContentPane();
    contentPane.add(button);

}

public void associateListener(ActionListener o) {
    button.addActionListener((ActionListener) o);
}
}

并且有一个单独的action Listener类,如下所示

public class MyActionListener implements ActionListener {

@Override
public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
System.out.println("Working Action Listener");
}
public class GLA14 {
public static void main(String[] args) {
    // TODO Auto-generated method stub
Solution sol = new Solution();

sol.show();

sol.associateListener(new MyActionListener());
}
}

将这两个与您的GLA14类连接起来,如下所示

public class MyActionListener implements ActionListener {

@Override
public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
System.out.println("Working Action Listener");
}
public class GLA14 {
public static void main(String[] args) {
    // TODO Auto-generated method stub
Solution sol = new Solution();

sol.show();

sol.associateListener(new MyActionListener());
}

}

您可以通过frame类中的公共方法实现这一点

public class NewFrame extends JFrame {

private JButton button; 
public  Solution() {
    button= new JButton("Test");
    Container contentPane = getContentPane();
    contentPane.add(button);

}

public void associateListener(ActionListener o) {
    button.addActionListener((ActionListener) o);
}
}

并且有一个单独的action Listener类,如下所示

public class MyActionListener implements ActionListener {

@Override
public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
System.out.println("Working Action Listener");
}
public class GLA14 {
public static void main(String[] args) {
    // TODO Auto-generated method stub
Solution sol = new Solution();

sol.show();

sol.associateListener(new MyActionListener());
}
}

将这两个与您的GLA14类连接起来,如下所示

public class MyActionListener implements ActionListener {

@Override
public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
System.out.println("Working Action Listener");
}
public class GLA14 {
public static void main(String[] args) {
    // TODO Auto-generated method stub
Solution sol = new Solution();

sol.show();

sol.associateListener(new MyActionListener());
}

}这里是一个令人担忧的例子。实例化有点糟糕,但你应该明白这一点

GLA14.java:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class GLA14 implements ActionListener
{    
    public static void main (String[] args)
    {
       new GLA14();
    }

    public GLA14()
    {
        new NewFrame2(this);
    }

    @Override
    public void actionPerformed(ActionEvent arg0)
    {
        System.out.println("Action Performed");        
    }
}
NewFrame2.java:

import javax.swing.JButton;
import javax.swing.JFrame;


public class NewFrame2
{

    public NewFrame2(GLA14 gla14)
    {
        JFrame frame = new JFrame();
        JButton submit = new JButton();
        frame.setBounds(10,10,200,100);
        frame.add(submit);

        submit.setText("Submit");
        submit.addActionListener(gla14);

        frame.setVisible(true);
    }

}

请注意,GLA14的实例作为参数传递给NewFrame2的构造函数。然后,您可以将该实例指定为按钮的ActionListener。

下面是一个工作示例。实例化有点糟糕,但你应该明白这一点

GLA14.java:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class GLA14 implements ActionListener
{    
    public static void main (String[] args)
    {
       new GLA14();
    }

    public GLA14()
    {
        new NewFrame2(this);
    }

    @Override
    public void actionPerformed(ActionEvent arg0)
    {
        System.out.println("Action Performed");        
    }
}
NewFrame2.java:

import javax.swing.JButton;
import javax.swing.JFrame;


public class NewFrame2
{

    public NewFrame2(GLA14 gla14)
    {
        JFrame frame = new JFrame();
        JButton submit = new JButton();
        frame.setBounds(10,10,200,100);
        frame.add(submit);

        submit.setText("Submit");
        submit.addActionListener(gla14);

        frame.setVisible(true);
    }

}

请注意,GLA14的实例作为参数传递给NewFrame2的构造函数。然后,您可以将该实例指定为按钮的ActionListener。

我只是在GLA14.java中定义了一个函数calculate,在NewFrame2.java中提交按钮的actionPerformed中,我创建了一个GLA14.java类的对象并称为calculate。
谢谢大家的帮助。

我只是在GLA14.java中定义了一个函数calculate,在NewFrame2.java中SUBMIT按钮的actionPerformed中,我创建了一个GLA14.java类的对象并调用了calculate。
谢谢大家的帮助。

你为什么要这样做?通常,我们将侦听器创建为一个独立的类,并使用它来处理操作。正如@Aakash所说,或者更确切地说,将您的侦听器从GLA14.java中提取出来(如果它已经存在),让它成为自己的类,甚至是GLA14中的一些类和NewFrame2中的一些类可以实现的接口。我想对使用这些数据成员和成员函数的submit按钮执行一些操作。这就是我想在GLA14.java中定义actionPerformed的原因。为什么要这样做?通常,我们将侦听器创建为一个独立的类,并使用它来处理操作。正如@Aakash所说,或者更确切地说,将您的侦听器从GLA14.java中提取出来(如果它已经存在),让它成为自己的类,甚至是GLA14中的一些类和NewFrame2中的一些类可以实现的接口。我想对使用这些数据成员和成员函数的submit按钮执行一些操作。这就是为什么我想在GLA14.java中定义执行的操作。我不认为这个问题与android有关。我不认为这个问题与android有关