JDialog的构造方法中的owner是什么意思
import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; public class AboutDialog extends JDialog{ static JFrame jf=new JFrame(); /** * @param args */ static JFrame tf=new JFrame(); public static void main(String[] args) { // TODO Auto-generated method stub new AboutDialog(jf); } public AboutDialog(JFrame owner){ super(owner,"关于记事本",true); tf.setVisible(true); tf.setLocation(600, 600); tf.setSize(100,100); JMenuBar jb=new JMenuBar(); JMenu jm=new JMenu("FIle"); JMenuItem ji=new JMenuItem("About"); jb.add(jm); jm.add(ji); jf.setJMenuBar(jb); ji.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub setVisible(true); } }); jf.setVisible(true); jf.setSize(300,300); add(new JLabel("<html><h1>Window7 旗舰版</i></h1><hr><p>Microsoft Windows</p><p>....</p></html>"),BorderLayout.CENTER); JPanel panel=new JPanel(); JButton ok=new JButton("Ok"); ok.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub setVisible(false); } }); panel.add(ok); add(panel,BorderLayout.SOUTH); setSize(250,150); } }
这里super(owner,"关于记事本",true);我吧owner改成tf并没有看出什么变化,看了一会API文档后还是一头雾水
首先, 就你这段程序而言, 由于你的tf和jf都是一个new出来的jframe,当然是没变化的,但是你将own改成tf后用到其他的地方, 这里就失去了传入参数的意义。
其次给你解释一下owner,不就是一个参数吗, 在实际应用中,我们通常在一个窗口点击某个组件新建一个窗口,但是新建的窗口要用到老窗口的一些都东西。
再次,这种传入参数在swing中体现了一种层次关系, 当新窗口存在的时候, 就窗口,也就是OWNER是不能被操作的,这就防止了同时执行一个窗口的多个动作
super(owner,"关于记事本",false);
这里把true改为false
然后,执行程序,在打开dialog框的状态下,分别关闭jf和tf,看dialog框是随着谁的关闭而关闭的.
然后,把owner改成tf,再按上面的方式执行下,看这次dialog框是随着谁的关闭而关闭的.
如此可以看出来区别.