Java-如何设置JTextArea高度以适合其内容?

Java-如何设置JTextArea高度以适合其内容?,java,swing,jtextarea,Java,Swing,Jtextarea,我在JPanel中有一个JTextArea。JPanel具有空布局或使用绝对布局。 JTextArea具有固定的宽度。如何设置JTextArea的高度以适合其内容 我有以下代码: *some random string of varying length* String str = "kdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkda" + "kdafkakopwepo

我在JPanel中有一个JTextArea。JPanel具有空布局或使用绝对布局。 JTextArea具有固定的宽度。如何设置JTextArea的高度以适合其内容

我有以下代码:

*some random string of varying length*
String str = "kdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkda"
           + "kdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkda"
           + "kdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkda"
           + "kdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkda"
           + "kdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkda"
           + "kdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkdafkakopwepopkkda";


JTextArea wtd = new JTextArea(str);
wtd.setLineWrap(true);
wtd.setOpaque(false);
wtd.setEditable(false);
wtd.setBorder(new EtchedBorder(EtchedBorder.LOWERED));
wtd.setLocation(*defined x position*, *defined y position*);
wtd.setPreferredSize(new Dimension(*fixed width*, *the height depending on the content*));
wtd.setSize(wtd.getPreferredSize());
add(wtd);
提前感谢您的帮助

  • 不要使用
    null
    布局。虽然空布局和
    setBounds()
    可能会像创建复杂GUI的最简单和最好的方式一样吸引新手,但您创建的GUI越多,在使用它们时遇到的困难就越严重。当GUI调整大小时,它们不会调整您的组件的大小,它们是一个需要增强或维护的皇家女巫,当它们放置在滚动窗格中时会完全失败,当在所有平台或屏幕分辨率与原始分辨率不同的情况下查看时,它们看起来非常糟糕
  • 不要为JTextAreas设置绝对高度或宽度或preferredSize永远——这样做可以完全防止它们在JScrollPanes中使用
  • 而是设置JTextArea的列和行属性
  • 不要使用
    null
    布局。虽然空布局和
    setBounds()
    可能会像创建复杂GUI的最简单和最好的方式一样吸引新手,但您创建的GUI越多,在使用它们时遇到的困难就越严重。当GUI调整大小时,它们不会调整您的组件的大小,它们是一个需要增强或维护的皇家女巫,当它们放置在滚动窗格中时会完全失败,当在所有平台或屏幕分辨率与原始分辨率不同的情况下查看时,它们看起来非常糟糕
  • 不要为JTextAreas设置绝对高度或宽度或preferredSize永远——这样做可以完全防止它们在JScrollPanes中使用
  • 而是设置JTextArea的列和行属性

  • 谢谢你的回答!我使用空布局是因为我在做某种相对布局(比如Android)。如果有一个布局与相对布局相似,它是什么布局?另外,我如何知道我放入的字符串的行数?我在JTaTaReA中放置的字符串可以变化,它不固定到一定数量的字符。@ Cclix:我不熟悉相对布局,但总是考虑嵌套JPanels,每个都有自己的布局,以便简单地创建复杂的GUI。还可以研究第三方布局,例如MigLayout。嵌套JPanel似乎是个好主意。我会努力寻找一个适合我想做的布局。顺便说一句,我所说的相对布局是一个布局,其中组件的位置将基于其他组件的位置。例如,如果我希望一个JButton位于JLabel之下,我将获得JLabel的y位置和高度,然后添加它们(或添加定义的间隙),并将其设置为JButton的y位置。是这样的。@cLix:当你问这样的问题时,你会想1)发布一张图片(或者如果你的代表太少,会有一个图片链接),展示你想要实现的目标,2)你最好的代码尝试。谢谢你的回答!我使用空布局是因为我在做某种相对布局(比如Android)。如果有一个布局与相对布局相似,它是什么布局?另外,我如何知道我放入的字符串的行数?我在JTaTaReA中放置的字符串可以变化,它不固定到一定数量的字符。@ Cclix:我不熟悉相对布局,但总是考虑嵌套JPanels,每个都有自己的布局,以便简单地创建复杂的GUI。还可以研究第三方布局,例如MigLayout。嵌套JPanel似乎是个好主意。我会努力寻找一个适合我想做的布局。顺便说一句,我所说的相对布局是一个布局,其中组件的位置将基于其他组件的位置。例如,如果我希望一个JButton位于JLabel之下,我将获得JLabel的y位置和高度,然后添加它们(或添加定义的间隙),并将其设置为JButton的y位置。是这样的。@cLix:当你问这样的问题时,你会想1)发布一张图片(或者如果你的代表太少,会发布一个图片链接),展示你想要实现的目标,2)你最好的代码尝试。