2014-02-13 50 views
1

我正在開發一個小型的GUI應用程序,我應該在JTextPane中打開一個文本文檔。它工作得很好,除了當我將一個DocumentListener添加到我的JTextPane時,偵聽器沒有被調用。Java - 沒有調用DocumentListener

這裏的SSCE:

//GUI.java 

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import java.io.*; 

class GUI 

{ 

public static void main(String[] args) 

{ 
    final JFrame frame = new JFrame("Frame"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    final JTabbedPane Tab = new JTabbedPane(); 

    JMenuBar MenuBar = new JMenuBar(); 

    JMenu File = new JMenu("File"); 
    File.setMnemonic('F'); 

    JMenuItem Open = new JMenuItem("Open"); 

    File.add(Open); 
    MenuBar.add(File); 

    Open.addActionListener(new ActionListener() 
    { 
    public void actionPerformed(ActionEvent eaal) 
    { 
    JFileChooser fc = new JFileChooser("."); 
    int response = fc.showOpenDialog(frame); 
    try{ 
    BufferedReader reader = new BufferedReader(new FileReader(fc.getSelectedFile()))); 
    JTextPane Text = new JTextPane(); 
    Text.getDocument().addDocumentListener(new DocumentChangeListener()); 
    Text.read(reader,null); 
    Tab.add(fc.getSelectedFile().toString(), Text); 
    } 
    catch(Exception ea) 
    {} 
    } 
    }); 

    frame.add(Tab); 
    frame.setJMenuBar(MenuBar); 
    frame.setSize(450,450); 
    frame.setLocationRelativeTo(null); 
    frame.setVisible(true); 
} 

} 

//DocumentChangeListener.java 

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.event.*; 

class DocumentChangeListener implements DocumentListener 
{ 
public void changedUpdate(DocumentEvent edcl){} 
public void insertUpdate(DocumentEvent edcl) 
{ 
    System.out.println("Inserted"); 
} 
public void removeUpdate(DocumentEvent edcl){} 
} 

什麼我錯在這裏做什麼?

謝謝!

+1

擁有空的catch塊並不是一個好主意。 – Kayaman

+0

@Kayaman,是的,你說得對。我的錯。 – mundomug

回答

1

read會爲JTextComponent一個新的文檔,以便addDocumentListener需要調用它,而不是之前

text.read(reader, null); 
text.getDocument().addDocumentListener(new DocumentChangeListener()); 
+0

謝謝!它現在完美。感謝您的幫助。 :) – mundomug

2

的問題是,當你說Text.read,你改變文檔後調用。

移動Text.getDocument().addDocumentListener(new DocumentChangeListener());改爲Text.read(reader,null);你應該很好!

+2

謝謝你幫助我。 :-) – mundomug