2017-03-15 55 views
0

我想根据JTextArea中getLineCount函数的返回值设置ScrollPane中的高度。 当我在ScrollPane的Dimension中将该值设置为高度时,它非常小。我已经添加了* 20来获得最接近我期待的结果。 但是,使用这个技巧,getLineCount的数字越大,它变得越不准确,这意味着JScrollPane的高度变得比我希望的高。如何将JTextArea行数的值转换为Dimension height_JAVA

我需要一个公式来转换它们之间的指标。然而,我不确切知道它们返回/使用的是什么度量,除非它们是int值。

如果有内置库来转换这两者,它也可能会有用。 关于这个问题似乎没有很多在线帖子。有没有人遇到过这个问题?

int height= textArea.getLineCount(); 
JScrollPane scrollPane = new JScrollPane(textArea); 
scrollPane.setPreferredSize(new Dimension(1, height* 20)); 
+2

这是什么意思?如果您尝试将滚动窗格的大小调整为文本区域的大小,则不需要滚动窗格。 – camickr

+0

['JTextArea#setRows'](https://docs.oracle.com/javase/8/docs/api/javax/swing/JTextArea.html#setRows-int-) – MadProgrammer

+0

@camickr我明白你提出的问题。我知道通常在滚动窗格中设置某些高度是毫无意义的。但是,在这个阶段我需要设置一定的高度来查看JTextArea的全文,并且在将来我会实现一个将其降低到一定高度的函数。一旦它减少,我将在滚动窗格中使用滚动条。为了使未来的实现更容易,我在此阶段使用滚动条禁用滚动条。 –

回答

3

这是什么意思?如果您尝试将滚动窗格的大小调整为文本区域的大小,则不需要滚动窗格。

不要尝试管理大小。不要尝试使用setPreferredSize()方法。

相反,您可以定义要在文本区域显示的行数,而不使用JTextAreasetRows(...)方法滚动。

这将允许文本区域根据文本区域的行和字体确定其首选大小。该滚动窗格将自动调整为文本区域的首选大小。

如果添加了更多行数据,则会出现滚动条。

+0

我已经解决了,谢谢你的建议。不过,我用textArea.setRows(textArea.getLineCount());然后我从textArea.getRows()获取行;然后我通过textArea.setAlignmentX(rows)设置textArea的高度; ..我从scrollpane中移除了setPreferredSize,并且如您所说,滚动窗格将被调整为textArea的高度。谢谢! –

1

你这样做的方式是设置高度值,就像每条线的高度为1像素一样。

将您的行号码乘以Graphics.getFontMetrics().getHeight(),其中您的图形上设置了字体。它应该解决你的问题

+0

感谢您的快速回复。 Font类没有getHeight函数。你的意思是getSize ..?或者你的意思是在JTextArea中的文本! –

+0

@ In-youngChoung不,不是getSize。我再次纠正了我的回答 – ControlAltDel

+0

@ In-youngChoung,对不起。再次修复。我认为现在是 – ControlAltDel