gpt4 book ai didi

java - 如何在启用换行的情况下获取 JTextArea 中的可见行数?

转载 作者:行者123 更新时间:2023-11-29 05:13:10 24 4
gpt4 key购买 nike

我想知道当换行设置为 true 时,如何获取 JTextArea 中的可见行数?

最佳答案

您对“可见线条”的定义是什么?例如如果:

  1. 显示了半行。算不算一行?
  2. 显示了一半的换行。算不算一行?

无论如何,我认为解决方法是使用视口(viewport)的位置和 viewToModel() 方法来获取视口(viewport)中显示的第一行和最后一行文本的偏移量。

然后你可以使用文档的Element结构来确定这些偏移量的行号。一旦知道行号,就可以计算行号之间的差异。

最后根据你对我上面问题的回答,你根据需要调整行号。

以下是帮助您入门的基础知识:

import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
import java.io.*;

public class TestTextArea {

public static void main(String[] args) {
new TestTextArea();
}

public TestTextArea() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {

JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new TestTextAreaPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}

public class TestTextAreaPane extends JPanel {

private JTextArea textArea;

public TestTextAreaPane() {
setLayout(new BorderLayout());
textArea = new JTextArea(20, 100);
textArea.setWrapStyleWord(true);
textArea.setLineWrap(true);

try
{
FileReader reader = new FileReader( "TestTextArea.java" );
BufferedReader br = new BufferedReader(reader);
textArea.read( br, null );
br.close();
}
catch(Exception e2) { System.out.println(e2); }

JScrollPane scrollPane = new JScrollPane(textArea);
add(scrollPane);
scrollPane.getViewport().addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
if (textArea.getText().length() > 0) {
JViewport viewport = (JViewport) e.getSource();
Rectangle viewRect = viewport.getViewRect();

Point p = viewRect.getLocation();
int startIndex = textArea.viewToModel(p);

int lineHeight = textArea.getFontMetrics( textArea.getFont() ).getHeight();
p.y += viewRect.height - lineHeight;
int endIndex = textArea.viewToModel(p);

Element root = textArea.getDocument().getDefaultRootElement();
int startLine = root.getElementIndex( startIndex );
int endLine = root.getElementIndex( endIndex );
int lines = endLine - startLine + 1;
System.out.println(lines);
}
}
});
}
}
}

关于java - 如何在启用换行的情况下获取 JTextArea 中的可见行数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27559334/

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