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(); } }
ผลลัพธ์