-1

我无法allField, nbGrpGen, Na 在我的 actionListener 中传递这三个参数。即使有全局变量,Eclipse 也会告诉我它们“无法解析为变量”。如果在 class 中声明了这些元素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();
            }
        }
    }
}
4

3 回答 3

2

您有多种选择来完成此操作。
1)处置ecoout5并使用匿名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类”)

2) 将 Na 作为参数传递给 ecoout5 的构造函数,这样可能更简洁,更易于阅读和重用:

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

可能还有更多选择,但我希望提到的一个应该做

于 2012-08-07T20:26:37.160 回答
0

您需要创建na一个全局变量:

private int na;

public Panneau_fenetre1A(int na)
{
    this.na = na;
    // la reste ici
于 2012-08-07T20:11:41.913 回答
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();

        }
      }
    });
  }
于 2012-08-07T20:12:56.450 回答