gpt4 book ai didi

java - 组合 JTextArea

转载 作者:行者123 更新时间:2023-11-30 05:05:23 25 4
gpt4 key购买 nike

基本上这就是我想做的:

我在两个单独的 JScrollPanes 中有两个单独的 JTextArea,我想将它们组合起来,因此当第一个 TextArea 的文本太长时,应该在第二个 TextArea 上继续。但它也应该与滚动一起使用:如果我滚动第一个 TextArea,第二个 TextArea 应该随之滚动(反之亦然)。我尝试计算最大可能的可显示行数,以便我知道有多少行可见。我发现了这个:

public void paint(Graphics g) {   
super.paint(g);
final FontMetrics fontMetrics = g.getFontMetrics();
// get width of any char (font is monospaced)
final int charWidth = fontMetrics.charWidth('M');
final int charHeight = fontMetrics.getHeight();
final int prefWidth = this.getPreferredSize().width;
// get height of Parent (JScrollPane)
final int prefHeight = this.getParent().getHeight();

int maxChars = prefWidth/charWidth;
int maxLines = prefHeight/charHeight;
}

但是 getParent().getHeight() 方法不起作用,因为我使用 LayoutManager (SpringLayout)设置了组件的大小,并且我只是定义了约束来设置组件的大小,我认为这是固定组件比例的最佳方法,即使在调整窗口大小之后也是如此。如果我错了,请纠正我,在尝试了各种布局管理器(这些都有点糟糕和难看)之后,我不知道有没有动力进一步思考这个问题)。因此 getHeight() 方法始终返回 0,因为我从未设置过大小。

还有其他方法可以获取嵌套在 ScrollPane 中的 TextArea 的可见行吗?或者我在这里完全错了,应该采取其他方式吗?

感谢您的帮助。

最佳答案

我从来没有做过类似的事情,但我认为看待问题的方法是重新定义问题。

您实际上想要同一文档有 2 个 View 。 View 1 将显示达到某个最大长度的所有字符。 View 2 将显示其余所有 View 。

我认为这可以通过创建自定义 Document 来完成共享基础数据的类(可能是主文档,这样您就可以获取文档的更新事件)并具有不同的偏移量。

每个 JTextArea 都有它自己的 Document 实例。

当第一个窗口已满时,您仍然需要手动跳转到第二个窗口(当然,您可以对 TextArea 进行编程,使其在达到 MAX_LENGTH 时自动执行此操作)。

我没有看到连接滚动条的优势,因为它们显示不同的数据。为什么滚动到区域 1 的第 100 行意味着您想要滚动到区域 2 的第 1100 行?

而且我认为你不应该碰 paint 方法。您需要的是业务逻辑,而不是图形:)

关于java - 组合 JTextArea,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5270932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com