在NetBeans中,我有一个包含JPanel的JDialog。我试图将JDialog的引用传递给JPanel。请看下面的代码。当我按照我的方式这样做时,我会收到“在构造函数中泄漏”警告。我理解为什么,但我不知道如何解决这个问题。我也知道我可以使用@SuppressWarnings(“LeakingThisInConstructor”)但是没有真正的方法来解决这个问题而不会抑制警告吗?
public class MyJDialog extends javax.swing.JDialog {
public MyJDialog(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
MyJPanel.getThis(this);
}
}
public class MyJPanel extends javax.swing.JPanel {
private JDialog dialog;
public MyJPanel() {
initComponents();
}
public void getThis(JDialog dialog){
this.dialog = dialog;
}
}
答案 0 :(得分:2)
如果我理解正确,那么JDalog正在创建JPanel实例。在这种情况下,您可以通过JPanel的构造函数将引用传递给JDIalog。
在MyJPanel类中:
public MyJPanel(JDialog dialog) {
initComponents();
this.dialog = dialog;
}
在你创建MyJPanel的JDialog中你可以这样做:
myPanel = new MyJPanel(this);
答案 1 :(得分:1)
构造函数将返回对话框的引用。创建实例后,让面板设置变量。
public class MyJPanel extends JPanel {
private JDialog dialog;
public MyJPanel(Frame aFram) {
dialog = new MyJDialog(aFrame, true);
}
}
此外,该代码无效,因为getThis()
不是静态方法,因此需要引用MyJPanel
实例。
答案 2 :(得分:1)
您可以坚持使用@SuppressWarnings("LeakingThisInConstructor")
,因为所有UI对象都是在 Swing 应用中的单主题中创建的,因此传递{{没有问题1}}在Swing组件的consturctor的最后一行。