首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >组合式JTextAreas

组合式JTextAreas
EN

Stack Overflow用户
提问于 2011-03-11 17:07:37
回答 2查看 164关注 0票数 1

基本上这就是我想要做的:

我在两个独立的JScrollPanes中有两个独立的JTextAreas,我想合并它们,所以当文本需要第一个TextArea时,应该继续第二个。但它也应该与滚动一起工作:如果我滚动第一个TextArea,第二个应该与它一起滚动(反之亦然)。我尝试计算可显示的最大可能线数,以便知道有多少线条可见。我发现了这个:

代码语言:javascript
复制
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 )设置了组件的大小,我只是定义约束来设置组件的大小,我认为这是使组件的比例固定的最好方法,即使在调整窗口大小之后也是如此。如果我错了请纠正我,在尝试了几个小时的各种LayoutManagers (它们都是很糟糕和丑陋的)之后,我没有任何动力去进一步考虑这个问题)。所以getHeight()方法总是返回0,因为我从来没有设置过大小。

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

谢谢你的帮助。

EN

回答 2

Stack Overflow用户

发布于 2011-03-11 19:57:12

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

实际上,您希望在同一文档上有两个视图。视图编号1将显示最大长度的所有字符。2号视图将显示所有其余部分。

我认为这可以通过创建一个自定义的Document类来实现,该类共享底层数据(可能是主文档,这样您就可以获得文档的更新事件),并且具有不同的偏移量。

每个JTextAreas都有自己的文档实例。

当第一个窗口已满时,您仍然必须手动跳转到第二个窗口(当然,当您到达MAX_LENGTH时,您可以将TextArea编程为自动执行此操作)。

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

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

票数 1
EN

Stack Overflow用户

发布于 2011-03-12 00:27:00

你的要求对我来说毫无意义:

因此,当文本需要等待第一个TextArea时,应该在第二个one上继续

好的,假设创建一个文本区来显示10行。在第一行中,输入20行,然后溢出到第二行,现在有1行。

如果我滚动第一个TextArea,第二个应该与它一起滚动(反之亦然)。

当文本区域只有一行时,如何滚动文本区域?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5270932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档