在我的对话框中,我有一个按钮。在它的动作侦听器方法中,这是指什么?它是按钮的参考还是JDialog的参考?我注意到它是JDialog的引用,因为在我的IDE中我按 this。所有其他组件和容器的方法如dispose
出现。如果是这样,它是如何引用JDialog的?它应该是JButton。
jButton5.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton5ActionPerformed(evt);
}
});
private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {
boolean rB_1 = jRadioButton1.isSelected();
boolean rB_2 = jRadioButton2.isSelected();
boolean rB_4 = jRadioButton4.isSelected();
if(rB_2)
new class_design().changeStatusOfMessageDisplayMode(true);
this.dispose(); // <-------- this one
}
从done
jdialog
的按钮时,会调用上面的代码
答案 0 :(得分:3)
这看起来像Netbeans的代码。 jButton5ActionPerformed作为JDialog中的一个方法站在它自己身上。这显然是指包含该方法的JDialog类。
jButton1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
this <---Refers to the ActionListener.
}
});
this <---Refers to the class (JDialog in your case)
为了避免陷入这种情况,Netbeans在匿名ActionListener之外创建一个新方法jButton1ActionPerformed,并调用它。
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
this <---obviously refers to the JDialog
}
答案 1 :(得分:3)
它是对实现ActionListener
接口的类的对象的引用{/ 1}}。
如果为此实现了“独立”类,它将是该类的实例。如果你传入了一个匿名类,那么它就是对该匿名类的实例的引用。
如果动作侦听器是JDialog本身,则addActionListener
引用JDialog对象。
在您的情况下,您使用的是匿名类。所以在this
内,actionPerformed
指的是该类的一个实例。 但是,请注意您正在调用未在该匿名类中定义的函数。这就是“神奇”发生的地方:内部类具有对封闭类的引用。
this
相当于:
jButton5ActionPerformed(evt);
因此在myenclosingobject.jButton5ActionPerformed(evt);
内,jButton5ActionPerformed
指的是封闭类的对象,即创建该匿名类实例的对象。
这在JLS Inner classes and Enclosing instances中解释:
类O的直接内部类C的实例i与O的实例相关联,称为i的直接封闭实例。在创建对象时确定对象的直接封闭实例(如果有)(第15.9.2节)。
答案 2 :(得分:1)
1)你必须阅读How to Make Dialogs
2)如果您每个应用生命周期只创建JDialog
一次,则调用JDialog#dispose(),否则只创建一次JDialog
并将其重新用于其他操作/事件
答案 3 :(得分:1)
在你的情况下,我想这是一个场景,
可能在netbeans中,你创建了一个jframe,然后添加了一个jdialog.Then添加了一个jbutton,现在双击按钮,编写执行动作的代码(或右键单击,事件&gt;动作&gt; actionperformed)
注意:然后添加了一个jdialog ,我的意思是你拖动它将它放到框架中。
在给定方案中,此指的是jframe
,而不是jdialog