哪种方法可以返回,如何找到已打开的顶级容器的数量
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class SuperConstructor extends JFrame {
private static final long serialVersionUID = 1L;
public SuperConstructor() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setPreferredSize(new Dimension(300, 300));
setTitle("Super constructor");
Container cp = getContentPane();
JButton b = new JButton("Show dialog");
b.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
FirstDialog firstDialog = new FirstDialog(SuperConstructor.this);
}
});
cp.add(b, BorderLayout.SOUTH);
pack();
setVisible(true);
}
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
SuperConstructor superConstructor = new SuperConstructor();
}
});
}
private class FirstDialog extends JDialog {
private static final long serialVersionUID = 1L;
FirstDialog(final Frame parent) {
super(parent, "FirstDialog");
setPreferredSize(new Dimension(200, 200));
setLocationRelativeTo(parent);
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
setModalityType(Dialog.ModalityType.DOCUMENT_MODAL);
JButton bNext = new JButton("Show next dialog");
bNext.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
SecondDialog secondDialog = new SecondDialog(parent, false);
}
});
add(bNext, BorderLayout.SOUTH);
pack();
setVisible(true);
}
}
private int i;
private class SecondDialog extends JDialog {
private static final long serialVersionUID = 1L;
SecondDialog(final Frame parent, boolean modal) {
//super(parent); // Makes this dialog unfocusable as long as FirstDialog is visible
setPreferredSize(new Dimension(200, 200));
setLocation(300, 50);
setModal(modal);
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
setTitle("SecondDialog " + (i++));
JButton bClose = new JButton("Close");
bClose.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
setVisible(false);
}
});
add(bClose, BorderLayout.SOUTH);
pack();
setVisible(true);
}
}
}
答案 0 :(得分:2)
Window [] all Windows = Windows.get Windows(); ?
答案 1 :(得分:1)
由于J2EE在单词的非常具体的含义中使用“容器”一词,因此最好在示例中说“有多少顶级对话框”。请注意,在Swing中,“top”也具有非常特定的含义,因此只能有一个“top”项目,即(或将要)绘制在所有其他项目之上的项目。既然答案“一”可能不是你需要的答案,我猜你真的意思是“打开了多少个对话框?”
计算打开对话框的方法是向SuperConstructor
类添加一个可以保存已打开对话框“计数”的成员。在按钮的动作侦听器中,您将创建一个新对话框。您可以将代码放在表示对话框的类中,或者在创建对话框的动作侦听器中递增计数。这两种技术都没问题,但是如果你需要一个偏好,那么把它放在动作监听器中(嵌入在SuperConstructor
类中)是我的首选。
如果您需要计数不仅仅是打开的对话框数,您需要监听对话框关闭事件并在对话框关闭时减少计数。
请注意,将对话框设置为Visible与删除对话框不同,因此请注意查看可见性或存在(取决于您所需的需要),但不要编写在存在时递增但递减的代码能见度(反之亦然)。