文档侦听器java“;无法实例化类型DocumentListener";
我正试图为一个项目编写一个简单的退休计算器。文档侦听器java“;无法实例化类型DocumentListener";,java,swing,jtextfield,documentlistener,Java,Swing,Jtextfield,Documentlistener,我正试图为一个项目编写一个简单的退休计算器。 我正在尝试获取一个文档侦听器,这样我就可以从不同的文本字段中获取输入,并在计算中使用它们 由于某种原因,我无法让DocumentListener实例化,结果出现了一个错误。我想我不知道该怎么做 给我一个错误的特定代码行是: DocumentListener DL = new DocumentListener(); 下面是我尝试使用的类: import javax.swing.*; import javax.swing.event.*; impor
我正在尝试获取一个文档侦听器,这样我就可以从不同的文本字段中获取输入,并在计算中使用它们 由于某种原因,我无法让DocumentListener实例化,结果出现了一个错误。我想我不知道该怎么做 给我一个错误的特定代码行是:
DocumentListener DL = new DocumentListener();
下面是我尝试使用的类:
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
public class TextFields extends JPanel implements DocumentListener
{
public TextFields()
{
setLayout(new GridLayout(5,1));
setFont(new Font("Tahoma", Font.PLAIN, 14));
DocumentListener DL = new DocumentListener();
JTextField age = new JTextField("Age");
age.getDocument().addDocumentListener(DL);
JLabel ageLabel = new JLabel("Age: ");
JTextField initialSavings = new JTextField("Intial Savings");
JLabel ISLabel = new JLabel("Inital Savings: ");
JTextField ageRetire = new JTextField("Retirement Age");
JLabel RALabel = new JLabel("Retirement Age: ");
JTextField inflation = new JTextField("Inflation Rate");
JLabel inflationLabel = new JLabel("Inflation Rate: ");
JTextField dailySavings = new JTextField("Daily Savings");
JLabel DSLabel = new JLabel("Daily Savings: ");
JTextField DeathAge = new JTextField("Age Of Death");
JLabel DALabel = new JLabel("When will you die? ");
JTextField retirementIncome = new JTextField("Retirement Income:");
JLabel RILabel = new JLabel("Retirement Income: ");
JTextField interest = new JTextField("Interest Rate");
JLabel interestLabel = new JLabel("Interest: ");
add(ageLabel);
add(age);
add(ISLabel);
add(initialSavings);
add(RALabel);
add(ageRetire);
add(inflationLabel);
add(inflation);
add(DSLabel);
add(dailySavings);
add(DALabel);
add(DeathAge);
add(interestLabel);
add(interest);
add(RILabel);
add(retirementIncome);
}
@Override
public void changedUpdate(DocumentEvent e) {
// TODO Auto-generated method stub
}
@Override
public void insertUpdate(DocumentEvent e) {
// TODO Auto-generated method stub
}
@Override
public void removeUpdate(DocumentEvent e) {
// TODO Auto-generated method stub
}
}
因为我是一名程序员,所以我会很感激那些不需要大量知识就能理解的简单答案
非常感谢您的时间和帮助!
罗伊。短版:
长版本:
首先,我要给你错误的解释。在此之后,我将提供一个适合您需要的特殊案例
这个错误意味着您的DocumentListener
要么是一个抽象类,要么是一个接口(阅读这两个方面的内容,您就会明白了)
解决方案是查找它的子类(在EclipseIDE编辑器中选择类名时按CTRL+T),或者在实例化它的地方创建一个匿名类(参见下面的示例)。请记住,实例化接口通常不是一个好主意(除非您知道自己在做什么),即接口应该由单独的类实现,然后实例化这些类
DocumentListener dl = new DocumentListener()
{
// implement abstract methods here
};
知道了这一点,我们现在必须将所有这些具体化到您的代码中 将侦听器附加到不同元素(通常,侦听器是接口)时,代码标准是将侦听器作为匿名类直接添加为API参数,如下所示:
age.getDocument().addDocumentListener(new DocumentListener()
{
// implement necessary methods here
});
立即告诉我您需要在那里实现哪些方法。最后,您的代码应该如下所示:
age.getDocument().addDocumentListener(new DocumentListener()
{
public void changedUpdate(DocumentEvent e)
{
}
public void insertUpdate(DocumentEvent e)
{
}
public void removeUpdate(DocumentEvent e)
{
}
});
在这些方法中,您可以对那些接收事件(类型为DocumentEvent
——阅读javadoc)执行任何您想要的操作
另一种方法(您已经开始使用的方法)是直接在工作类中实现
DocumentListener
,然后在那里实现这些方法(正如您所做的那样,请注意类末尾的三个重写方法)。在本例中,您所要做的就是告诉age.getDocument()
在哪里可以找到侦听器
age.getDocument().addDocumentListener(this);
通过以侦听器的身份编写此
,这意味着当抛出DocumentEvent
时,执行将通过您在那里的那些方法(changedUpdate
,insertUpdate
,removeUpdate
)。简短版本:
长版本:
首先,我要给你错误的解释。在此之后,我将提供一个适合您需要的特殊案例
这个错误意味着您的DocumentListener
要么是一个抽象类,要么是一个接口(阅读这两个方面的内容,您就会明白了)
解决方案是查找它的子类(在EclipseIDE编辑器中选择类名时按CTRL+T),或者在实例化它的地方创建一个匿名类(参见下面的示例)。请记住,实例化接口通常不是一个好主意(除非您知道自己在做什么),即接口应该由单独的类实现,然后实例化这些类
DocumentListener dl = new DocumentListener()
{
// implement abstract methods here
};
知道了这一点,我们现在必须将所有这些具体化到您的代码中 将侦听器附加到不同元素(通常,侦听器是接口)时,代码标准是将侦听器作为匿名类直接添加为API参数,如下所示:
age.getDocument().addDocumentListener(new DocumentListener()
{
// implement necessary methods here
});
立即告诉我您需要在那里实现哪些方法。最后,您的代码应该如下所示:
age.getDocument().addDocumentListener(new DocumentListener()
{
public void changedUpdate(DocumentEvent e)
{
}
public void insertUpdate(DocumentEvent e)
{
}
public void removeUpdate(DocumentEvent e)
{
}
});
在这些方法中,您可以对那些接收事件(类型为DocumentEvent
——阅读javadoc)执行任何您想要的操作
另一种方法(您已经开始使用的方法)是直接在工作类中实现
DocumentListener
,然后在那里实现这些方法(正如您所做的那样,请注意类末尾的三个重写方法)。在本例中,您所要做的就是告诉age.getDocument()
在哪里可以找到侦听器
age.getDocument().addDocumentListener(this);
通过以侦听器的身份编写
此
,这意味着当抛出DocumentEvent
时,执行将通过您在那里的那些方法(changedUpdate
,insertUpdate
,removeUpdate
).正如您在TextFields类声明中看到的,您正在实现DocumentsTener,这意味着它是一个接口,您不能实例化接口。
用这个替换有问题的行
DocumentListener DL = new TextFields();
因为TextFields已经实现了DocumentListener接口,所以一切都会很好。
或者您可以为侦听器使用单独的类或内部类。正如您在TextFields类声明中看到的,您正在实现DocumentsTener,这意味着这是一个接口,不能实例化接口。
age.getDocument().addDocumentListener(this);
用这个替换有问题的行
DocumentListener DL = new TextFields();
因为TextFields已经实现了DocumentListener接口,所以一切都会很好。
或者,您可以为侦听器使用单独的类或内部类
age.getDocument().addDocumentListener(this);