2013-10-23 44 views
0

我是一名初学者程序员,我正试图学习如何将在主类中创建的某些对象传递给其他类(在本例中为动作侦听器类)。如何将JButton传递给Action Listener类

我的问题是 - 如何将按钮传递给动作监听器类?这是我的代码片段。

public class MaxMinProgram 
{ 

    public static void main(String[] args) 
    { 
     JFrame frame = new JFrame("Max Min Program"); 
     GridLayout myLayout = new GridLayout(1,11); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     int size = 11; 
     JTextField[] fields = new JTextField[size];   
     JPanel panel = new JPanel(); 
     frame.setPreferredSize(new Dimension(500,110)); 
     frame.getContentPane().add(panel); 
     int k = 0; 
     for(k=0;k<fields.length;k++) 
     { 
      fields[k] = new JTextField("", 3); 
      panel.add(fields[k]); 
     } 
     JButton button = new JButton("Randomize"); 
     JButton button2 = new JButton("Max Min"); 
     panel.add(button); 
     panel.add(button2); 
     frame.pack(); 
     frame.setVisible(true); 

    } 
} 

public class myListener implements ActionListener 
{ 
    @Override 
    public void actionPerformed(ActionEvent evt) 
    { 
     ActionListener clickListener = new myListener(); 
     button.addActionListener(clickListener); //this is the line 
     int [ ] numbers = new int [10]; 
     JTextField [] textFields; 
     Random randomize = new Random(); 
     int x = randomize.nextInt(100); 
    } 
} 

非常感谢您的帮助!

回答

2

移动

ActionListener clickListener = new myListener(); 
    button.addActionListener(clickListener); //this is the line 

要将main方法,例如

public static void main(String[] args) 
{ 
    JFrame frame = new JFrame("Max Min Program"); 
    GridLayout myLayout = new GridLayout(1,11); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    int size = 11; 
    JTextField[] fields = new JTextField[size];   
    JPanel panel = new JPanel(); 
    frame.setPreferredSize(new Dimension(500,110)); 
    frame.getContentPane().add(panel); 
    int k = 0; 
    for(k=0;k<fields.length;k++) 
    { 
     fields[k] = new JTextField("", 3); 
     panel.add(fields[k]); 
    } 
    JButton button = new JButton("Randomize"); 
    JButton button2 = new JButton("Max Min"); 

    ActionListener clickListener = new myListener(); 
    button.addActionListener(clickListener); //this is the line 

    panel.add(button); 
    panel.add(button2); 
    frame.pack(); 
    frame.setVisible(true); 

} 
+0

我做到这一点,它给我的错误一个“非静态变量,这不能从静态上下文中引用” – Alec

+0

使你的'myListener'类'static' – MadProgrammer

1

首先,你应该对整个事情移到构造

public static void main(String[] args) 
{ 
    new MaxMinProgram(); 
} 

public MaxMinProgram(){ 
    JFrame frame = new JFrame("Max Min Program"); 
    GridLayout myLayout = new GridLayout(1,11); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    int size = 11; 
    JTextField[] fields = new JTextField[size];   
    JPanel panel = new JPanel(); 
    frame.setPreferredSize(new Dimension(500,110)); 
    frame.getContentPane().add(panel); 
    int k = 0; 
    for(k=0;k<fields.length;k++) 
    { 
     fields[k] = new JTextField("", 3); 
     panel.add(fields[k]); 
    } 
    JButton button = new JButton("Randomize"); 
    JButton button2 = new JButton("Max Min"); 
    panel.add(button); 
    panel.add(button2); 
    frame.pack(); 
    frame.setVisible(true); 
} 

,然后你可以添加监听器:

要么

button.addActionListener(new myListener()); 

ActionListener listener = new myListener(); 
    button.addActionListener(listener); 
在构造

0

你在你的代码中加入这一行创建后按钮

button.addActionListener(new myListener()); 
button1.addActionListener(new myListener()); 

的实例,并删除myListener的类并添加该类myListener的类

public class myListener implements ActionListener 
    { 
    @Override 
    public void actionPerformed(ActionEvent evt) 
    { 
     int [ ] numbers = new int [10]; 
     JTextField [] textFields; 
     Random randomize = new Random(); 
     int x = randomize.nextInt(100); 
    } 
    } 
相关问题