プログラムにドキュメント リスナーを実装しようとしています。これまでのところ、ユーザーが新しい単語を入力するたびに、テキスト全体を取得して保存しています。私がやりたいのは、入力された新しい単語/単語のみを取得して処理することです。どうすればそれができるか提案してもらえますか?
2 に答える
1
http://docs.oracle.com/javase/tutorial/uiswing/events/documentlistener.htmlのドキュメントはどうですか? 基本的に、insertUpdate イベントの DocumentEvent パラメータにはテキストが含まれます。オブジェクト e からテキストを取得する必要があります。
私の提案は、いくつかのコードを試してみることです。DocumentListener についてどれだけ知っているか見てみましょう。
于 2012-05-15T08:24:04.767 に答える
0
以下は、上記のコードに似た提案されたコードです。
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.util.Arrays;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
//public class DocumentListener { // Fix: not a good name for the class since it is part of JVM
public class DocumentEventDemo extends JFrame { // easier than extends JPanel
JPanel txtPanel, centerPanel;
GridLayout grid;
JTextField txtField;
JTextArea txtArea;
JFrame frame;
JComponent newContentPane;
FlowLayout flow;
public DocumentEventDemo() {
txtArea = new JTextArea();
txtArea.getDocument().addDocumentListener(new MyDocumentListener());
txtArea.getDocument().putProperty("txtArea", "MyDocumentListener");
// txtField = new JTextField(10); // 10 chars max
// txtField.setText("12345");
centerPanel = new JPanel();
grid = new GridLayout(2,1,1,1);
txtPanel = new JPanel();
flow = new FlowLayout(FlowLayout.CENTER);
txtPanel.setLayout(flow);
//Adding control GUI fields to the only panel
// txtPanel.add(txtArea);
// txtPanel.add(txtField);
// Forming the center view with GUI controls
centerPanel.setLayout(grid);
// centerPanel.add(txtPanel);
centerPanel.add(txtArea);
// Add Panels to the Frame
getContentPane().add(centerPanel,"Center");
this.setSize(500,200);
this.validate();
this.setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// newContentPane = getRootPane();
// newContentPane.setOpaque(true);
// frame.setContentPane(newContentPane);
}
//MyEditor editor = new MyEditor(); // what is MyEditor?
//javax.swing.event.DocumentListener mydocumentListener = new javax.swing.event.DocumentListener()
// Make a class to define the inherited abstract methods, which are also events.
class MyDocumentListener implements DocumentListener {
String[] word=new String[50];
String text;
int i=0;
int y;
int l;
int len;
public void changedUpdate(DocumentEvent documentEvent) {
System.out.println("The text has been changed.");
}
public void insertUpdate(DocumentEvent documentEvent) {
try {
GetWord(documentEvent);
} catch (BadLocationException ex) {
Logger.getLogger(DocumentListener.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void removeUpdate(DocumentEvent documentEvent) {
System.out.println("A character has been removed!");
}
private void GetWord(DocumentEvent documentEvent) throws BadLocationException {
//get the type of event
DocumentEvent.EventType type = documentEvent.getType();
//check what is the event, hence what is the user doing
if (type.equals(DocumentEvent.EventType.INSERT)) {
Document source = documentEvent.getDocument();
y=documentEvent.getOffset();
l=documentEvent.getLength();
len=source.getLength();
text = source.getText(y,l);
if(text.equals(" "))
{
for (int z=0;z<len;z++)
{
System.out.print(word[z]);
}
System.out.println("\n");
Arrays.fill(word,null);
i=0;
}
word[i]=text;
i++;
} else {
System.out.println("A character has been removed!");
}
}
}; // DocumentListener class instantiation
// editor. editArea.getDocument().addDocumentListener(mydocumentListener);
public static void main(String args[]){
new DocumentEventDemo();
}
} // TOP class
ノート:
- 私の最も外側のクラスは、ウィンドウとリスナーを簡単な方法で作成する JFrame を拡張します。
- DocumentEventDemo は、UI コントロールと外観を作成するコンストラクターです。
- DocumentListener を実装するクラスを作成しました。このようにして、抽象イベントをオーバーライドできます。
- 私の主な機能は、実際にあなたのもののように、DocumentEventDemo クラス内の一番下にあります。
- クラス MyEditor のコードが表示されません。したがって、それを JTextArea に置き換え、エディターのように動作します。
- あなたのコード GetWord はうまく機能しているようです。おめでとう!
- アプリはコンソールではなくWindows GUIアプリケーションであり、System.outでうまく機能するため、System.out.printlnを使用するテクニックは機能しません。
- 明らかに、変更済みおよび削除用の Listener 関数を使用する作業がまだ残っています。
楽しむ!
トミー・クウィー
于 2012-05-16T05:26:58.443 に答える