添加JTextArea会让JFrame成为巨大的原因么?

时间:2014-08-31 15:56:16

标签: 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 个答案:

答案 0 :(得分:1)

  1. 不要使用GridLayout,因为这会强制每个单元格大小相同。因此,如果一个单元格非常大,它将使单元格全部非常大。
  2. 而是使用其他布局或布局组合来制作更好的GUI。
  3. 别忘了把你的JTextArea放到JScrollPane中。

  4. 例如,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