1

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

public class ABC {
    CMyDialog m_dlg;

    onSomeEvent() {
       m_dlg = new CMyDialog();
    }
}

onSomeEvent被多次调用并显示多个对话框。知道 Java 是如何管理这些事情的吗?我是否需要保留一个 CMyDialog 数组作为成员变量而不仅仅是一个类?

非常感谢任何帮助。

提前致谢。尼廷·K。

4

2 回答 2

1

默认关闭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();
            }
        });
    }
}
于 2011-04-03T09:12:39.050 回答
0

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

于 2011-04-03T08:15:41.830 回答