我无法在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();
}
}
}
}
答案 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();
}
}
});
}