Java 如何在一个类中定义按钮,在不同的类中定义侦听器?
我有两个java类:GLA14.java和NewFrame2.java。java有一个提交按钮。我想在GLA14.java中定义它的侦听器。如何做到这一点?您可以在GLA14中继承或实现侦听器,并使用setOnClickListenernew GLA14;方法来使用它。您可以继承或实现GLA14中的侦听器,并使用setOnClickListenernew GLA14;按钮的方法来使用它。您可以在NewFrame2中有一个方法,该方法将ActionListener对象作为参数。在NewFrame2中此方法的主体内,然后将其指定给按钮:Java 如何在一个类中定义按钮,在不同的类中定义侦听器?,java,Java,我有两个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有关