-1

allField, nbGrpGen, Na actionListenerでこれらの3つの引数を渡すことができません。グローバルが存在する場合でも、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();
            }
        }
    }
}
4

3 に答える 3

2

これを達成するための複数の選択肢があります。
1)ecout5を破棄し、Anonymous 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「Javaanonymous」を使用してください。クラス")

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つがするべきであることを願っています

于 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 に答える