如何计算文本在JTextArea中的行数(以及每行中的列数)?在对问题中提出的问题感兴趣后, 我试图接近它几次并且失败了,我不喜欢那个:)我认为如果问题被分成子问题,它可能有助于解决它。为简单起见,假设JTextArea不会改变其大小,因此我们不需要担心重新评估等。我认为重要的问题是:1.如何计算某个文本在JTextArea中占用的行数?2. JTextArea中的列数与它可以放在一行中的字符数之间的关系是什么?所以我们可以计算行长度。请在下面找到包含要处理的文本区域的示例代码:import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JTextArea;import javax.swing.SwingUtilities;public class TextAreaLines{
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
JPanel p = new JPanel();
JFrame f = new JFrame();
JTextArea ta = new JTextArea("dadsad sasdasdasdasdasd");
ta.setWrapStyleWord(true);
ta.setLineWrap(true);
ta.setRows(5);
ta.setColumns(5);
p.add(ta);
f.setContentPane(p);
f.setSize(400, 300);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
//BTW the code below prints 1
System.out.println("ta.getLineCount()="+ta.getLineCount());
}
});
}}
3 回答
呼啦一阵风
TA贡献1802条经验 获得超6个赞
你可以做的一件事是使用FontMetrics
。我写了一些代码,用于JTextArea
在某些行号上拆分。设置代码如下所示:
Graphics2D g = (Graphics2D) g2;FontMetrics m = g.getFontMetrics();int lineHeight = m.getHeight();
这将告诉您文本行的高度。
不幸的是,大多数字体中的字母宽度不同。但是,您可以使用以下代码来确定String的宽度。
int width = m.getStringBounds("Some String", g).getWidth();
我知道这并没有完全回答你的问题,但我希望它有所帮助。
如果你没有使用自动换行,这里是你可以使用的通用算法:(在paint组件方法中)
String text[] = getText().split("\n");String newText = "";for (String line: text) { newText = line + "| " + line.length() + "\n";}setText(newText);
这是一般的想法。不确定它会有多好。如果你试试,请告诉我。
Helenr
TA贡献1780条经验 获得超4个赞
不确定这是否有帮助,但您需要设置文本区域的宽度,以便视图知道何时包装文本。设置尺寸后,您可以确定首选高度。当您知道首选高度时,可以使用字体metrice行高来确定包括包裹行(如果有)的总行数。
import java.awt.*;import javax.swing.*;public class TextAreaPreferredHeight extends JFrame{ public TextAreaPreferredHeight() { JTextArea textArea = new JTextArea(); textArea.setText("one two three four five six seven eight nine ten"); textArea.setLineWrap( true ); textArea.setWrapStyleWord( true ); FontMetrics fm = textArea.getFontMetrics( textArea.getFont() ); int height = fm.getHeight(); System.out.println("000: " + textArea.getPreferredSize()); textArea.setSize(100, 1); System.out.println("100: " + textArea.getPreferredSize()); System.out.println("lines : " + textArea.getPreferredSize().height / height); textArea.setSize(200, 1); System.out.println("200: " + textArea.getPreferredSize()); System.out.println("lines : " + textArea.getPreferredSize().height / height); textArea.setSize(300, 1); System.out.println("300: " + textArea.getPreferredSize()); System.out.println("lines : " + textArea.getPreferredSize().height / height); add(textArea); pack(); setVisible(true);} public static void main(String[] args) { new TextAreaPreferredHeight(); }}
添加回答
举报
0/150
提交
取消