2
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)

4

2 回答 2

8

你的问题很简单。当您使用时,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); 
            } 
        }); 
    } 
} 
于 2012-05-12T22:15:53.147 回答
5

我想你想替换这一行:

JDialog vce = new JDialog(this);

对此:

JDialog vce = new JDialog(MyWindow.this);

这里的问题是this,在您定义的匿名内部类的上下文中,指的是内部类,而不是定义内部类的MyWindow对象。更改thisMyWindow.this告诉 Java 它是MyWindow您想要的当前对象,而不是内部类。

希望这可以帮助!

于 2012-05-12T22:16:59.717 回答