【问题标题】:JTextArea - very small size with long textJTextArea - 非常小的尺寸和长文本
【发布时间】:2009-01-18 19:28:24
【问题描述】:

我正在使用 JTextArea 来显示长文本

JTextArea _definition = new JTextArea(5, 50);

带自动换行

_definition.setLineWrap(true);
_definition.setWrapStyleWord(true);

嵌入到 JScrollPane 中

add(new JScrollPane(_definition), gbc);

所有这些都是带有 GridBagLayout 的 JPanel 的一部分。

使用较短的文本一切正常,但是当我添加带有换行的长文本并且需要滚动条时,pack() 向南移动,所有组件都只有最小尺寸,并且对话框无法使用(它不仅是受影响的文本区域)。

我试图弄清楚发生了什么,但我只能弄清楚这与 TextArea 中的文本有关。我被困住了..有什么想法吗?谢谢!

【问题讨论】:

    标签: java swing textarea sizing


    【解决方案1】:

    尝试拨打pack() 两次。 JTextArea 有一些奇怪的行为as described in this entry in the Java bug database。它最初将其首选大小报告为非常宽的单行条目(例如,一行,一千列)。一旦它意识到它是一个特定的宽度,它就会报告它需要的行数的正确首选大小。

    我不得不做很多不同的事情来解决这个问题,包括继承 JTextArea 和修改它的行为让它更聪明一点。在这种情况下,双重pack() 可能对您有用,或者您可能不得不根据布局中的所有内容如何组合在一起进行更复杂的调整。

    【讨论】:

    • Double pack()-ing 对我不起作用.. 你能详细说明“更复杂的调整”吗.. 谢谢!
    • 第一步可能是尝试继承 JTextArea 并跟踪每次调用 get*Size() 方法,看看结果是否符合您的预期。
    【解决方案2】:

    得到它的工作..罗斯的回答是给我一些更好的搜索条件,所以感谢你帮助我指出正确的方向!

     pack();
     _definition.setSize(_definition.getPreferredSize());
     pack();
    

    所以双重包装加上一些额外的......奇怪的行为。

    【讨论】:

      猜你喜欢
      • 2020-05-21
      • 2015-06-25
      • 2014-02-14
      • 2018-02-07
      • 1970-01-01
      • 2023-03-25
      • 2013-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多