Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JInternalFrame的内容物包装过紧_Java_Swing - Fatal编程技术网

Java JInternalFrame的内容物包装过紧

Java JInternalFrame的内容物包装过紧,java,swing,Java,Swing,当我在JInternalFrame上调用pack()时,它没有正确打包,大部分都太紧了 编辑: 下面是一个显示上述行为的最小示例。 它似乎还取决于所使用的外观(这里是Nimbus) 在将JInternalFrame添加到相应的JDesktopPane后,您必须调用pack(),pack使用内容的首选大小来决定它需要多大…不知道为什么,因为我在任何手册中都找不到它,但在添加到DesktopPane之前和之后,我都直接使用调用pack()对其进行了测试,只有第二个给出了正确的结果,我不知道它是否只继

当我在
JInternalFrame
上调用
pack()
时,它没有正确打包,大部分都太紧了

编辑:

下面是一个显示上述行为的最小示例。 它似乎还取决于所使用的外观(这里是Nimbus)


在将
JInternalFrame
添加到相应的
JDesktopPane
后,您必须调用
pack()
pack
使用内容的首选大小来决定它需要多大…不知道为什么,因为我在任何手册中都找不到它,但在添加到DesktopPane之前和之后,我都直接使用调用pack()对其进行了测试,只有第二个给出了正确的结果,我不知道它是否只继承了装饰信息或者类似的东西。我只是通过网络进行验证,发现我并不是唯一一个经历过这种情况的人:我与Nimbus有着几乎相同的问题(金属没有出现这种问题):已将
JScrollPane
设置为
JInternalFrame
的内容窗格。然后,使用Nimbus时,它总是同时显示垂直和水平滚动条。
pack
使用内容的首选大小来决定它需要多大,这表明您的内容存在一些问题,可能会提供您正在获得的内容和您期望的内容的图片
import javax.swing.*;

public class JInternalFrameTester {

  public static void main(String[] args) {
    try {
      UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
    }
    catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
      System.err.println("Failed setting NimbusLookAndFeel");
    }
    JFrame frame = new JFrame();
    JDesktopPane desktop = new JDesktopPane();
    desktop.setOpaque(true);
    frame.setContentPane(desktop);
    frame.setSize(250, 250);
    frame.setVisible(true);

    JInternalFrame iframe = new JInternalFrame("Internal Frame");
    JTextField textfield = new JTextField("Any text here");
    iframe.add(textfield);
    iframe.setVisible(true);
    /* XXX If placed here, it crashes the layouts */
    iframe.pack();
    desktop.add(iframe);
    /* XXX If placed here, the layout is right */
    //iframe.pack();
  }
}