参数ActionListener

时间:2012-08-07 20:04:30

标签: java swing arguments actionlistener

我无法在actionListener中传递这三个参数allField, nbGrpGen, Na。 即使有全局,Eclipse告诉我他们“无法解析变量”。 如果这些元素在类Panneau_fenetre1A中声明,则它可以工作。但我不能这样做因为,我需要Na的价值。

import javax.swing.*;
import java.awt.event.*;

class Panneau_fenetre1A extends JPanel {

    JLabel phrase = new JLabel(
            "Veuillez indiquer le nombre de groupe generalisant par Niveau");
    JButton boutonOK = new JButton("OK");

    public Panneau_fenetre1A(int Na) {
        final JTextField[] allField = new JTextField[Na];
        final String[] nbGrpGen = new String[Na];
        for (int i = 0; i < Na; i++) {
            allField[i] = new JTextField(String.valueOf(0));
            allField[i].setBounds(150, 350 + i * 25, 20, 20);
            add(allField[i]);
        }
        boutonOK.addActionListener(new ecout5());
    }

    class ecout5 implements ActionListener {

        public void actionPerformed(ActionEvent evt) {
            for (int i = 0; i < Na; i++) {
                nbGrpGen[i] = allField[i].getText();
            }
        }
    }
}

3 个答案:

答案 0 :(得分:2)

你有多种选择来实现这一目标 1)处理ecout5并使用匿名ActionListener,这不再冗长,对于习惯于java的人来说更容易理解:

boutonOK.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent evt)
    {

        for(int i = 0;i < Na ;i++)
        {
            nbGrpGen[i] = allField[i].getText();
        }                   
    }
}

更多关于Java中的匿名类:http://docstore.mik.ua/orelly/java-ent/jnut/ch03_12.htm(找不到能够轻松捕获本质的引用,如果这变得陈旧,只需google“Java匿名类”)

2)将Na作为参数传递到ecout5的构造函数中,这可能更清晰,更易于阅读和重用:

boutonOK.addActionListener(new ecout5(Na));

...

class ecout5 implements ActionListener 
{   
    private int Na;
    public ecout5(int Na)
    {
        this.Na = Na;
    }

    public void actionPerformed(ActionEvent evt)
    {

        for(int i = 0;i < Na ;i++)
        {
            nbGrpGen[i] = allField[i].getText();
        }                   
    }

也有更多的选择,但我希望其中一个应该做

答案 1 :(得分:0)

您需要将na设为全局变量:

private int na;

public Panneau_fenetre1A(int na)
{
    this.na = na;
    // la reste ici

答案 2 :(得分:0)

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

import java.lang.Integer;

class Panneau_fenetre1A extends JPanel
{

  JLabel phrase = new JLabel("Veuillez indiquer le nombre de groupe generalisant par Niveau");
  JButton boutonOK = new JButton ("OK");


  public Panneau_fenetre1A(final int Na)
  {
    final JTextField[] allField = new JTextField [Na];
    final String[] nbGrpGen = new String [Na];
    for(int i = 0;i < Na;i++)
    {
      allField[i] = new JTextField(String.valueOf(0));
      allField[i].setBounds(150, 350 + i * 25, 20, 20);
      add(allField[i]);
    }

    boutonOK.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {

        for(int i = 0;i < Na ;i++)
        {
          nbGrpGen[i] = allField[i].getText();

        }
      }
    });
  }