方法在构造函数中起作用,但不在动作侦听器中起作用

时间:2014-05-08 00:37:03

标签: java object methods action listener

我的问题是方法" findChampion"仅在构造函数中起作用,我需要在动作侦听器中工作以在textfield中使用。 我认为问题是冠军对象。改变方法和静态变量,但没有工作 感谢。

private JTextField textField;
private Champion[] championsList;
private boolean first = true;
int previous = 0;
public Finder(Champion[] champions) {
    setBounds(1,1,795,365);
    setLayout(null);

    championsList = champions;

    textField = new JTextField();
    textField.setBounds(354, 5, 107, 44);
    add(textField);
    textField.setColumns(10);

    //WORKS HERE

    for (int i=0;i<championsList.length;i++)
    {
    if (textField.getText().equalsIgnoreCase(championsList[i].getName()))
    {
        if (first == false)
        {
        championsList[previous].removeChampion(this);
        }
        championsList[i].position(119,120,100,100,50,50);
        championsList[i].addChampion(this);
        previous = i;
        first = false;
    }
    }
    //

            //BUT DOESN'T WORK HERE

    textField.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            findChampion();
        }
    });
    //


}

public void findChampion()
{
    for (int i=0;i<championsList.length;i++)
    {
    if (textField.getText().equalsIgnoreCase(championsList[i].getName()))
    {
        if (first == false)
        {
        championsList[previous].removeChampion(this);
        }
        championsList[i].position(119,120,100,100,50,50);
        championsList[i].addChampion(this);
        previous = i;
        first = false;
    }
    }
}strong text

1 个答案:

答案 0 :(得分:0)

对于JTextField,您应该使用DocumentListener而不是ActionListener。这是查找TextField中发生的更改的最佳方法。

TextField.getDocument().addDocumentListener(new DocumentListener{ //implement necessary methods });

在这里查看示例:    http://docs.oracle.com/javase/tutorial/uiswing/events/documentlistener.html