为了账号安全,请及时绑定邮箱和手机立即绑定

如何计算文本在JTextArea中的行数(以及每行中的列数)?

如何计算文本在JTextArea中的行数(以及每行中的列数)?

幕布斯6054654 2019-08-28 15:29:05
如何计算文本在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);

这是一般的想法。不确定它会有多好。如果你试试,请告诉我。


查看完整回答
反对 回复 2019-08-28
?
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();
    }}


查看完整回答
反对 回复 2019-08-28
  • 3 回答
  • 0 关注
  • 1119 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信