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

时间:2011-04-03 08:11:18

标签: java swing jdialog jtogglebutton

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

public class ABC {
    CMyDialog m_dlg;

    onSomeEvent() {
       m_dlg = new CMyDialog();
    }
}
多次调用

onSomeEvent并显示多个对话框。知道Java如何管理这些东西吗?我是否需要将一个CMyDialog数组作为成员变量而不仅仅是一个类?

非常感谢任何帮助。

提前致谢。 Nitin K。

2 个答案:

答案 0 :(得分:1)

JDialog的{​​{3}}为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();
            }
        });
    }
}

答案 1 :(得分:0)

虽然有几个对话框实例可见,但每个实例都占用主内存中的一个单独空间。变量名称可能相同,但所有对话框实例不共享相同的内存。我希望这就是你所要求的。