你好我通过将这些面板一个接一个地添加到这个容器中。但是当我添加JTextArea时,它使所有其他面板之间有更多的填充。如何摆脱每个面板之间的额外空间?我试图在GridLayout构造函数中将水平和垂直间隙设置为0,但是,除非我将它们设置为>否则更改这些值无效。 5然后他们变得更大。
setLayout(new GridLayout(5, 1, 0, 0));
pack();
setVisible(true); //Make visible
textArea = new JTextArea(initialText, 6, 25);
答案 0 :(得分:1)
例如,BoxLayout可以正常工作,但是如果你这样做,你必须认识到你实际上是在设置contentPane的布局而不是JFrame:
//!! setLayout(new GridLayout(5, 1, 0, 0)); // Set BorderLayout
setLayout(new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS)); // Note getContentPane()
修改强>
你问:
将其设置为BoxLayout确实解决了这个问题,但是我试图解决getContentPane()使用的逻辑,然后是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