gpt4 book ai didi

Java Swing JTextArea 行号

转载 作者:行者123 更新时间:2023-12-02 01:57:00 24 4
gpt4 key购买 nike

计算文本区域的行数。该代码工作正常,但是当运行此代码时,文本区域未激活,插入符号被隐藏并且键盘
除非我点击文本区域,否则按键不起作用。

代码:

import java.awt.BorderLayout;
import java.awt.Color;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.Element;

public class LineNumber extends JFrame implements DocumentListener {

private static final long serialVersionUID = -1093726028044203117L;

private JScrollPane scroll;
private JTextArea textArea, lineArea;

public static void main(String[] args) {

new LineNumber().setVisible(true);

}

public LineNumber() {

super("Line Numbers");

setSize(500, 500);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);

setUI();
}

private void setUI() {

textArea = new JTextArea();

lineArea = new JTextArea(0, 3);
lineArea.setEditable(false);
lineArea.setForeground(Color.GRAY);

scroll = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

textArea.getDocument().addDocumentListener(this);

scroll.setViewportView(textArea);
scroll.setRowHeaderView(lineArea);
getContentPane().add(scroll, BorderLayout.CENTER);

}

public void changedUpdate(DocumentEvent event) {

lineArea.setFont(textArea.getFont());
lineArea.setText(getLine());

}

public void insertUpdate(DocumentEvent event) {

lineArea.setFont(textArea.getFont());
lineArea.setText(getLine());
}

public void removeUpdate(DocumentEvent event) {

lineArea.setFont(textArea.getFont());
lineArea.setText(getLine());
}

public String getLine() {

int caretPos = 0;
String lines;

caretPos = textArea.getDocument().getLength();
Element root = textArea.getDocument().getDefaultRootElement();
lines = String.format("%s%s", 1, System.lineSeparator());

for (int i = 2; i < root.getElementIndex(caretPos) + 2; i++) {
lines += String.format("%s%s", i, System.lineSeparator());

}

return lines;

}

}

如果我不将 lineArea 添加到滚动 Pane ,则文本区域可以正常工作,但添加到 setRowHeaderView 后,文本区域只能通过单击鼠标来激活......

最佳答案

您可以使用以下方法防止行号文本区域获得焦点:

lineArea = new JTextArea(0, 3);
lineArea.setEditable(false);
lineArea.setFocusable(false);

您还可以查看Text Component Line Number更高级的实现支持:

  1. 换行文本
  2. 具有不同大小字体的文本(使用 JTextPane 时)

关于Java Swing JTextArea 行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52179097/

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