我的问题是方法" 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
答案 0 :(得分:0)
对于JTextField,您应该使用DocumentListener而不是ActionListener。这是查找TextField中发生的更改的最佳方法。
TextField.getDocument().addDocumentListener(new DocumentListener{
//implement necessary methods
});
在这里查看示例: http://docs.oracle.com/javase/tutorial/uiswing/events/documentlistener.html