您好,我通过将面板一个接一个地添加到这个容器中,处理得很好。然而,当我添加 JTextArea 时,它使所有其他面板之间有更多的填充。如何消除每个面板之间的额外空间?我尝试在 GridLayout 构造函数中将水平和垂直间隙设置为 0,但是,更改这些值没有任何效果,除非我使它们 > 5 然后它们变得更大。
setLayout(new GridLayout(5, 1, 0, 0));
pack();
setVisible(true); //Make visible
textArea = new JTextArea(initialText, 6, 25);
最佳答案
- 不要使用 GridLayout,因为这会强制每个单元格具有相同的大小。因此,如果一个单元格非常大,所有单元格都会变得非常大。
- 而是使用其他布局或布局组合来制作更好、更令人愉悦的 GUI。
- 不要忘记将 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/