java - 计算给定设置宽度的 JTextArea 中的行数

标签 java swing jtextarea multiline

我试图可靠地计算给定宽度的 JTextArea 中的行数(包括换行和换行符)。我使用此信息来设置 GUI 中其他组件的高度(例如,对于 n 行,设置组件的 n*高度)。

我偶然发现了this solution (转载如下)但这有一个问题。有时,如果该行上没有太多文本,它会漏掉一行。例如,如果宽度为 100 的 JTextArea 有 3 行文本,而在第 3 行仅包含宽度为 15 的文本,那么它只会计算 2 行而不是 3 行。

public class MyTextArea extends JTextArea {

    //...

    public int countLines(int width) {

        AttributedString text = new AttributedString(this.getText());
        FontRenderContext frc = this.getFontMetrics(this.getFont()).getFontRenderContext();
        AttributedCharacterIterator charIt = text.getIterator();
        LineBreakMeasurer lineMeasurer = new LineBreakMeasurer(charIt, frc);
        lineMeasurer.setPosition(charIt.getBeginIndex());

        int noLines = 0;
        while (lineMeasurer.getPosition() < charIt.getEndIndex()) {
            lineMeasurer.nextLayout(width);
            noLines++;
        }

        System.out.print("there are " + noLines + "lines" + System.getProperty("line.separator"));
        return noLines;
    }
}

知道什么可能导致此问题吗?除了计算 JTextArea 中的行数之外,还有其他选择吗?谢谢。

最佳答案

I'm using this information to set the height of other components in my GUI.

相反,让每个组件采用其 preferred sizepack() 封闭容器。如图here ,您可以将文本区域添加到尺寸有限的滚动 Pane 中,也许是行高的方便倍数。更一般地说,您可以实现 Scrollable 接口(interface),如 here 所述。 .

关于java - 计算给定设置宽度的 JTextArea 中的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17005336/

相关文章:

java - 如何发现子类中的方法(参数)是否在实现的接口(interface)中定义了注解?

java - JTextArea画Java?

Java - 按行号更新 JTextArea 中的文本

java - 其他方法中的eclipse auto getter和setter方法

java - 如何知道在 Spring 2.0 Controller 方法中当前 servlet 上下文中映射了哪些 URL?

java:如果我为变量分配与之前相同的值,它会更改内存还是 JIT 会识别这一点?

java - 线程中的异常 "AWT-EventQueue-0"java.lang.ClassCastException : Exception with add()

java - 在 jTextPane(或替代方案)中收听 HTML 复选框?

java - 重绘时复制了 JButton?

java - 如何将 ArrayList 中的字段输出到 JTextArea?