我有一个无模式对话框,我需要同时显示它的多个实例。 我把对话作为一个成员变量保存在一个新的类中,并显示对话框。这里有多个对话框实例可见,但我将它分配给同一个成员变量。(我需要将它作为成员变量进行一些处理)。它工作正常,但我不明白为什么这是有效的。我错过了一些非常明显的事情吗?
public class ABC {
CMyDialog m_dlg;
onSomeEvent() {
m_dlg = new CMyDialog();
}
}
多次调用 onSomeEvent
并显示多个对话框。知道Java如何管理这些东西吗?我是否需要将一个CMyDialog数组作为成员变量而不仅仅是一个类?
非常感谢任何帮助。
提前致谢。 Nitin K。
答案 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)
虽然有几个对话框实例可见,但每个实例都占用主内存中的一个单独空间。变量名称可能相同,但所有对话框实例不共享相同的内存。我希望这就是你所要求的。