我正在尝试将文档侦听器添加到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
}
}
}
答案 0 :(得分:3)
nested类AL
需要是静态的。除非您出于某种原因需要导出类,否则它应该是private
。
private static class AL implements DocumentListener {…}
答案 1 :(得分:2)
为AL
或
在没有AL
修饰符的ScrollingTextArea
类之外定义public
类。