Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java에서 JTextArea 내부에 줄 번호를 표시하려면 어떻게 해야 합니까?


JTextArea JTextComponent 의 하위 클래스입니다. 여러 줄 텍스트입니다. 구성 요소를 사용하여 텍스트를 표시하거나 사용자가 텍스트를 입력할 수 있습니다. JTextArea CaretListener 를 생성할 수 있습니다. 캐럿 업데이트 이벤트를 수신할 수 있는 인터페이스입니다. 기본적으로 JTextArea는 줄 번호를 표시하지 않으므로 D를 사용하여 코드를 사용자 지정해야 합니다. ocumentListener 인터페이스.

예시

import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.Element;
public class LineNumberTextAreaTest extends JFrame {
   private static JTextArea textArea;
   private static JTextArea lines;
   private JScrollPane jsp;
   public LineNumberTextAreaTest() {
      setTitle("LineNumberTextArea Test");
      jsp = new JScrollPane();
      textArea = new JTextArea();
      lines = new JTextArea("1");
      lines.setBackground(Color.LIGHT_GRAY);
      lines.setEditable(false);
      //  Code to implement line numbers inside the JTextArea
      textArea.getDocument().addDocumentListener(new DocumentListener() {
         public String getText() {
            int caretPosition = textArea.getDocument().getLength();
            Element root = textArea.getDocument().getDefaultRootElement();
            String text = "1" + System.getProperty("line.separator");
               for(int i = 2; i < root.getElementIndex(caretPosition) + 2; i++) {
                  text += i + System.getProperty("line.separator");
               }
            return text;
         }
         @Override
         public void changedUpdate(DocumentEvent de) {
            lines.setText(getText());
         }
         @Override
         public void insertUpdate(DocumentEvent de) {
            lines.setText(getText());
         }
         @Override
         public void removeUpdate(DocumentEvent de) {
            lines.setText(getText());
         }
      });
      jsp.getViewport().add(textArea);
      jsp.setRowHeaderView(lines);
      add(jsp);
      setSize(400, 275);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      setLocationRelativeTo(null);
      setVisible(true);
   }
   public static void main(String[] args) {
      new LineNumberTextAreaTest();
   }
}

출력

Java에서 JTextArea 내부에 줄 번호를 표시하려면 어떻게 해야 합니까?