在Java中创建具有相同变量的对象的多个实例

我有一个无模式对话框,我需要显示它同时显示的多个实例。 我把对话作为一个成员变量保存在一个新的类中,并显示对话框。这里有多个对话框实例可见,但我将它分配给同一个成员变量。(我需要将它作为成员变量进行一些处理)。它工作正常,但我不明白为什么这是有效的。我想念一些非常明显的东西吗?
public class ABC {
    CMyDialog m_dlg;

    onSomeEvent() {
       m_dlg = new CMyDialog();
    }
}
多次调用
onSomeEvent
,显示多个对话框。知道Java如何管理这些东西吗?我是否需要将CMyDialog数组保留为成员变量而不是单个类? 任何帮助都非常感谢。 提前致谢。 Nitin K.     
已邀请:
虽然有几个对话框实例可见,但每个实例都占用主内存中的一个单独空间。变量名称可能相同,但所有对话框实例不共享相同的内存。我希望这就是你所要求的。     
JDialog
的默认关闭操作是
HIDE_ON_CLOSE
。如果您不想要多个对话框,则可以只创建一个并使其可见
onSomeEvent()
。此示例使用切换按钮的
itemStateChanged()
处理程序。
import java.awt.EventQueue;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.*;

/** @see http://stackoverflow.com/questions/5528408 */
public class DialogToggle extends JPanel {

    private static final String show = "Show Dialog";
    private static final String hide = "Hide Dialog";
    MyDialog myDialog = new MyDialog();

    public DialogToggle() {
        final JToggleButton b = new JToggleButton(show);
        b.addItemListener(new ItemListener() {

            @Override
            public void itemStateChanged(ItemEvent e) {
                if (b.isSelected()) {
                    myDialog.setVisible(true);
                    b.setText(hide);
                } else {
                    myDialog.setVisible(false);
                    b.setText(show);
                }
            }
        });
        this.add(b);
    }

    private class MyDialog extends JDialog {

        public MyDialog() {
            this.setLocationRelativeTo(DialogToggle.this);
            this.add(new JLabel("Hello, world!", JLabel.CENTER));
        }
    }

    private void display() {
        JFrame f = new JFrame("ABC");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(this);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new DialogToggle().display();
            }
        });
    }
}
    

要回复问题请先登录注册