java - 添加 JTextArea 会使 JFrame 变得巨大,为什么?

标签 java swing user-interface

您好,我通过将面板一个接一个地添加到这个容器中,处理得很好。然而,当我添加 JTextArea 时,它使所有其他面板之间有更多的填充。如何消除每个面板之间的额外空间?我尝试在 GridLayout 构造函数中将水平和垂直间隙设置为 0,但是,更改这些值没有任何效果,除非我使它们 > 5 然后它们变得更大。

    setLayout(new GridLayout(5, 1, 0, 0));

    pack();
    setVisible(true); //Make visible       

    textArea = new JTextArea(initialText, 6, 25);

最佳答案

  1. 不要使用 GridLayout,因为这会强制每个单元格具有相同的大小。因此,如果一个单元格非常大,所有单元格都会变得非常大。
  2. 而是使用其他布局或布局组合来制作更好、更令人愉悦的 GUI。
  3. 不要忘记将 JTextArea 放入 JScrollPane 中。
<小时/>

例如,BoxLayout 可以工作,但如果您这样做,您必须认识到您实际上是在设置 contentPane 的布局,而不是 JFrame:

//!! setLayout(new GridLayout(5, 1, 0, 0)); // Set BorderLayout
setLayout(new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS)); // Note getContentPane()
<小时/>

编辑
你问:

Setting it as BoxLayout really fixed the issue however, I am trying to undestand the logic used by getContentPane(), and then the PAGE_AXIS?

BoxLayout 与 GridLayout、FlowLayout 和 BorderLayout 不同,因为当您调用构造函数时,必须传入对要添加布局的组件的引用。看起来您正在将其添加到 JFrame 中,因为该类扩展了 JFrame,并且您正在 JFrame 本身上调用 setLayout(...) ,但是如果您传入 this,意味着当前的 JFrame 实例,您将得到一个运行时异常,因为 JFrame 的 setLayout(...) 方法实际上设置了 JFrame 的 contentPane 的布局。因此,要解决此问题,您需要传入 JFrame 的 contentPane。有关更多信息,请阅读 JFrames 教程。

对于问题的第二部分,为什么 BoxLayout 构造函数的第二个参数 BoxLayout.PAGE_AXIS 是用于水平或垂直定向布局。如需了解更多信息,请阅读 BoxLayout 教程和 API。

此引用资料将使您了解相关的 Swing 教程:Swing Info

关于java - 添加 JTextArea 会使 JFrame 变得巨大,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25593719/

相关文章:

java - 数据库文件上的 ENOENT(没有此类文件或目录)

java - 更新不同类的 java swing 组件

java - Swing JFrame 响应 native 窗口关闭事件

Java 在绘制线条时使用 jpanel 和 jscrollpane

java - 如何在主类中将面板类添加到我的框架中

python - Pyinstaller QtCore Module导入报错

java - 使用 Java 按住多个键的机器人

java - 多线程和图形

java - 如何在 HADOOP 运行时生成多个文件名?

javascript - 无法使用 jquery 删除占位符