代码之家  ›  专栏  ›  技术社区  ›  mundomug

Java-未调用DocumentListener

  •  2
  • mundomug  · 技术社区  · 11 年前

    我正在开发一个小的GUI应用程序,我应该在JTextPane中打开一个文本文档。它工作得很好,只是当我向JTextPane添加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){}
    }
    

    我在这里做错了什么?

    谢谢

    2 回复  |  直到 11 年前
        1
  •  3
  •   David Koelle    11 年前

    问题是当你说 Text.read ,您正在更改文档。

    移动 Text.getDocument().addDocumentListener(new DocumentChangeListener()); 之后 Text.read(reader,null); 你应该很好!

        2
  •  2
  •   Reimeus    11 年前

    read JTextComponent 所以 addDocumentListener 需要在调用之后而不是之前调用

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