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

如何计算文本在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());
            }
        });
    }}

幕布斯6054654
浏览 1120回答 3
3回答

呼啦一阵风

你可以做的一件事是使用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

不确定这是否有帮助,但您需要设置文本区域的宽度,以便视图知道何时包装文本。设置尺寸后,您可以确定首选高度。当您知道首选高度时,可以使用字体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();     }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java