gpt4 book ai didi

java - 如何在 JTextArea 行计数中考虑换行?

转载 作者:行者123 更新时间:2023-12-01 05:05:03 25 4
gpt4 key购买 nike

我知道这一点thread展示了一种方法,但在我的情况下它会导致奇怪的行为,我想知道是否没有更简单的方法来做到这一点。

我需要知道设置文本后我的 JTextArea 的大小。这是我目前的做法:

tarea.getLineCount() * tarea.getRowHeight();

除非没有换行,否则它会起作用。我想对换行进行相同的计算。有谁知道什么时候会发生换行吗?这样我只需要将当前行数增加一即可。

编辑:

这是(也许)我找到的解决方案。这几乎是this的复制粘贴作者:@camickr。

int rowStartOffset = textComponent.viewToModel(new Point(0, 0));
int endOffset = textComponent.viewToModel(new Point(0, textComponent.getHeight()));

int count = 0; //used to store the line count
while (rowStartOffset < endOffset) {
try {
rowStartOffset = Utilities.getRowEnd(textComponent, rowStartOffset) + 1;
} catch (BadLocationException ex) {
break;
}
count++;
}

我在启用/不启用换行的情况下进行了一些测试,它似乎有效。

最佳答案

在我看来,只要您没有在文本区域上调用 setPreferredSizegetPreferredSize 方法就应该为您提供您正在寻找的内容没有麻烦...

这就是为什么您不应该调用 setPreferredSize 来进行布局的原因。首选尺寸应该由组件计算(例如设置文本时)。

如果我没有捕获重点,请告诉我;)

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class CalculateTextAreaSize extends Box{

public CalculateTextAreaSize(){
super(BoxLayout.Y_AXIS);

final JTextArea text = new JTextArea("I've\nGot\nA\nLovely\nBunch\nof\nCoconuts!\n");

JScrollPane pane = new JScrollPane(text);

add(pane);

JButton button = new JButton("Set Text!");
button.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
text.insert("Longish string - how long will it be?", text.getDocument().getLength());
//The size it will be once everything is figured out
System.out.println(text.getPreferredSize());
//The size it is now because no rendering has been done
System.out.println(text.getSize());
}
});
add(button);
}

/**
* @param args
*/
public static void main(String[] args) {

JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(new CalculateTextAreaSize());
frame.validate();
frame.pack();
frame.setVisible(true);
}

}

关于java - 如何在 JTextArea 行计数中考虑换行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12837605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com