如何在jdialog中添加内部框架

时间:2011-03-26 14:47:27

标签: java

我正在使用以下代码:

      JDialog d=new JDialog();
         JInternalFrame i=new JInternalFrame("HI",false,false,false,false);
       i.setPreferredSize(new Dimension(100,100));
     d.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
     d.setTitle("Wait dialog");
    d.add(i);
     d.pack();
      d.setPreferredSize(new Dimension(100,100));
        d.setLocation(300,300);
    d.setAlwaysOnTop(true);
   d.setVisible(true);

但是没有得到大小为100 * 100的jdialog,我得到一个默认宽度和高度的小窗口,为什么会发生这种情况? 注意:我对JFrame做了同样的事情,我得到了结果。但是我想要它在JDialog上。

提前致谢

2 个答案:

答案 0 :(得分:1)

在将所有组件添加到JDialog之后但在使用setVisible(true)显示之前,需要在JDialog上调用pack()。

在一个不相关的说明中,通过JDialog构造函数重载之一将JDialog与其父窗口(可能是JFrame)相关联是个好主意。

编辑:您不希望将JInternalFrame直接添加到JDialog或其他顶级窗口。而是创建一个JDesktopPane,设置其preferredSize,将THAT添加到JDialog的contentPane,然后将JInternalFrame添加到JDesktopPane。

编辑2:您还需要设置内部框架的大小和位置(setBounds将适用于此)并在内部框架上调用setVisible(true)。关于使用内部框架和桌面窗格的Swing教程将告诉你所有这些。

编辑3:例如,

class testDialog {

   public static void main(String[] args) {
      JDialog d = new JDialog();
      JDesktopPane desktoppane = new JDesktopPane(); // added
      desktoppane.setPreferredSize(new Dimension(100, 100));// added
      JInternalFrame i = new JInternalFrame("HI", false, false, false, false);
      // i.setPreferredSize(new Dimension(100, 100));
      i.setBounds(0, 0, 100, 100);// added
      desktoppane.add(i);
      i.setVisible(true);

      d.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
      d.setTitle("Wait dialog");
      // d.add(i);
      d.add(desktoppane); // added
      d.pack();
      // d.setPreferredSize(new Dimension(100, 100));
      d.setLocation(300, 300);
      d.setAlwaysOnTop(true);
      d.setVisible(true);
   }
}

答案 1 :(得分:0)

这是SSCCE:

   import java.awt.Dimension;
   import javax.swing.*;

   public class testDialog
  {

public static void main(String []args)
   {
     JDialog d=new JDialog();
    JInternalFrame i=new JInternalFrame("HI",false,false,false,false);
    i.setPreferredSize(new Dimension(100,100));
    d.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
      d.setTitle("Wait dialog");
   d.add(i);
    d.pack();
   d.setPreferredSize(new Dimension(100,100));
    d.setLocation(300,300);
     d.setAlwaysOnTop(true);
    d.setVisible(true);
      }
      }