基本上这就是我想要做的:
我在两个独立的JScrollPanes中有两个独立的JTextAreas,我想合并它们,所以当文本需要第一个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 )设置了组件的大小,我只是定义约束来设置组件的大小,我认为这是使组件的比例固定的最好方法,即使在调整窗口大小之后也是如此。如果我错了请纠正我,在尝试了几个小时的各种LayoutManagers (它们都是很糟糕和丑陋的)之后,我没有任何动力去进一步考虑这个问题)。所以getHeight()方法总是返回0,因为我从来没有设置过大小。
有没有其他方法可以获得嵌套在ScrollPane中的TextArea的可见行?或者我在这里完全错了,应该用其他方式吗?
谢谢你的帮助。
发布于 2011-03-11 19:57:12
我从来没有做过这样的事情,但我认为看待问题的方法是重新定义问题。
实际上,您希望在同一文档上有两个视图。视图编号1将显示最大长度的所有字符。2号视图将显示所有其余部分。
我认为这可以通过创建一个自定义的Document类来实现,该类共享底层数据(可能是主文档,这样您就可以获得文档的更新事件),并且具有不同的偏移量。
每个JTextAreas都有自己的文档实例。
当第一个窗口已满时,您仍然必须手动跳转到第二个窗口(当然,当您到达MAX_LENGTH时,您可以将TextArea编程为自动执行此操作)。
我看不到连接滚动条的好处,因为它们显示不同的数据。为什么滚动到区域1的第100行意味着要滚动到区域2的第1100行?
我认为您不应该接触paint方法。您需要的是业务逻辑,而不是图形:)
发布于 2011-03-12 00:27:00
你的要求对我来说毫无意义:
因此,当文本需要等待第一个TextArea时,应该在第二个one上继续
好的,假设创建一个文本区来显示10行。在第一行中,输入20行,然后溢出到第二行,现在有1行。
如果我滚动第一个TextArea,第二个应该与它一起滚动(反之亦然)。
当文本区域只有一行时,如何滚动文本区域?
https://stackoverflow.com/questions/5270932
复制相似问题