Gin*_*ino 2 java scope this jframe jdialog
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);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
这个想法是在孩子可见时阻止JFrame父(JDialog).
JDialog的构造函数的参数必须是包含类"MyWindow",但是范围问题是ActionListener,这会产生以下错误.
我怎么解决这个问题?
错误信息:
没有为JDialog()构造函数找到合适的构造函数JDialog(java.awt.Frame)不适用(实际参数不能通过方法调用转换转换为java.awt.Frame)构造函数JDialog(java.awt.Dialog)不适用(实际参数不能通过方法调用转换转换为java.awt.Dialog)
你的问题很简单.当你正在使用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);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
我想你要替换这一行:
JDialog vce = new JDialog(this);
Run Code Online (Sandbox Code Playgroud)
到这一个:
JDialog vce = new JDialog(MyWindow.this);
Run Code Online (Sandbox Code Playgroud)
这里的问题是this,在您定义的匿名内部类的上下文中,引用内部类而不是定义内部类的MyWindow对象.更改this为MyWindow.this告诉Java它是MyWindow您想要的当前对象,而不是内部类.
希望这可以帮助!