如何在一个类中定义按钮并在diffrent类中定义监听器?

时间:2015-04-23 10:02:05

标签: java

我在java中有两个类:GLA14.java和NewFrame2.java。 NewFrame2.java有一个" SUBMIT"按钮。我想在GLA14.java中定义它的监听器。我怎么能这样做?

6 个答案:

答案 0 :(得分:2)

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

希望帮助你!

答案 1 :(得分:1)

您可以在NewFrame2中使用一个方法,该方法将ActionListener个对象作为参数。在NewFrame2范围内的此方法体内,您可以将其分配给按钮:

public class NewFrame2 {
    ...
    public void assignEventHandler(ActionListener listener) {
        this.button.addActionListener(listener);
    }
    ...
}

在你的GLA14中:

...
Frame2 f2 = ...
f2.assignEventHandler(new EvtHlr());
...

其他一些类(将进行实际的事件处理):

public class EvtHlr implements ActionListener() {
    ...
}

话虽如此,你所尝试的是非常规的。通常做的是你有:

  1. 将处理事件的匿名类,在声明按钮的同一个类中声明。 OR
  2. 一个单独的类(实现ActionListener),它可以被声明按钮的同一个类访问,然后作为按钮的事件处理程序传递。

答案 2 :(得分:1)

您可以使用框架类

中的公共方法实现此目的
-(void)back
{
     if(_stateView.stateType == StateType_Failed || _stateView.stateType == StateType_WiFi)
    { 
    UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"温馨提示" message:[NSString stringWithFormat:@"您确认要放弃连接 %@ 免费热点",_SSID] delegate:self cancelButtonTitle:@"确定" otherButtonTitles:@"不,谢谢", nil];
    [alertView show]; 
    return; 
    } 
    }

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{ 
if(buttonIndex == 0)
{ 
[self.navigationController popViewControllerAnimated:YES]; 
} 
}

}

并有一个单独的动作侦听器类,如下所示

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);
}

}

将这两个与您的GLA14课程相关联,如下所示

public class MyActionListener implements ActionListener {

@Override
public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
System.out.println("Working Action Listener");
}

}

答案 3 :(得分:1)

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

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。

答案 4 :(得分:1)

在NewFrame2.java

我简单地在GLA14.java和在的actionPerformed()中定义的函数计算()“提交”按钮,我创建GLA14.java类的一个对象,并称为计算()。 谢谢大家的帮助。

答案 5 :(得分:0)

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