如何将文档侦听器添加到JScrollPane内的JTextArea?

时间:2014-04-05 17:01:32

标签: java eclipse swing jtextarea documentlistener

我正在尝试将文档侦听器添加到JTextArea,这样当用户按下Enter键时,它将读取自新行以来的最后一行/字符。

我尝试了以下代码,但Eclipse并不喜欢display.getDocument().addDocumentListener(new AL());。它说

  

无法访问ScrollingTextArea类型的封闭实例。必须使用ScrollingTextArea类型的封闭实例限定分配(例如x.new A(),其中x是ScrollingTextArea的实例)。

如何将动作侦听器添加到JTextArea?

代码:

package guis;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.ScrollPaneConstants;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;

public class ScrollingTextArea {

    public static void main ( String[] args )
    {
        JPanel middlePanel = new JPanel ();
        middlePanel.setBorder(new TitledBorder(new EtchedBorder (), "Display Area" ) );

        // create the middle panel components

        JTextArea display = new JTextArea(16,58 );
        JScrollPane scroll = new JScrollPane(display);

        display.getDocument().addDocumentListener(new AL());
        scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

        //Add Textarea in to middle panel
        middlePanel.add(scroll);

        JFrame frame = new JFrame();
        frame.add( middlePanel );
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
    public class AL implements DocumentListener {


        @Override
        public void insertUpdate(DocumentEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void removeUpdate(DocumentEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void changedUpdate(DocumentEvent e) {
            // TODO Auto-generated method stub

        }
    }
}

2 个答案:

答案 0 :(得分:3)

nestedAL需要是静态的。除非您出于某种原因需要导出类,否则它应该是private

private static class AL implements DocumentListener {…}

答案 1 :(得分:2)

AL

创建单独的类

在没有AL修饰符的ScrollingTextArea类之外定义public类。