Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

เราจะแสดงหมายเลขบรรทัดภายใน JTextArea ใน Java ได้อย่างไร


A 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();
   }
}

ผลลัพธ์

เราจะแสดงหมายเลขบรรทัดภายใน JTextArea ใน Java ได้อย่างไร