public class MyWindow extends JFrame {
JButton botonCreate = new JButton("Open son windows");
public void doSomething(){
botonCreate.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JDialog vce = new JDialog(this);
}
});
}
}
这个想法是在孩子可见时阻止JFrame父(JDialog)。
JDialog的构造函数的参数必须是包含类“MyWindow”,但是范围问题是ActionListener,这会产生以下错误。
我该如何解决这个问题?
错误消息:
找不到合适的JDialog()构造函数 构造函数JDialog(java.awt.Frame)不适用 (实际参数不能通过方法调用转换转换为java.awt.Frame) 构造函数JDialog(java.awt.Dialog)不适用 (实际参数不能通过方法调用转换为java.awt.Dialog 转化率)
答案 0 :(得分:7)
你的问题很简单。当您使用this
时,您实际上正在使用ActionListener.this
。因此,要纠正此错误,您必须通过使用this
指定实际使用封闭类MyWindow.this
来向编译器解释。
class MyWindow extends JFrame {
JButton botonCreate = new JButton("Open son windows");
public void doSomething(){
botonCreate.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JDialog vce = new JDialog(MyWindow.this);
}
});
}
}
答案 1 :(得分:5)
我想你要替换这一行:
JDialog vce = new JDialog(this);
到这一个:
JDialog vce = new JDialog(MyWindow.this);
这里的问题是this
,在您定义的匿名内部类的上下文中,引用内部类而不是定义内部类的MyWindow
对象。将this
更改为MyWindow.this
会告诉Java它是您想要的当前MyWindow
对象,而不是内部类。
希望这有帮助!