我正在使用以下代码:
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上。
提前致谢
答案 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);
}
}