【问题标题】:Java - DocumentListener is not being calledJava - DocumentListener 没有被调用
【发布时间】:2014-03-12 18:05:07
【问题描述】:

我正在开发一个小型 GUI 应用程序,我应该在其中打开 JTextPane 中的文本文档。它工作正常,除了当我将 DocumentListener 添加到我的 JTextPane 时,没有调用侦听器。

这里是 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){}
}

我在这里做错了什么?

谢谢!

【问题讨论】:

  • 拥有空的 catch 块不是一个好主意。
  • @Kayaman,是的,你是对的。我的错。

标签: java swing jtextpane documentlistener


【解决方案1】:

readJTextComponent 创建一个新文档,因此addDocumentListener 需要在调用它之后而不是之前调用

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-10-28
      • 1970-01-01
      • 2016-09-05
      • 1970-01-01
      • 2018-05-16
      • 2012-07-19
      • 2021-10-25
      • 1970-01-01
      • 2011-11-15
      相关资源
      最近更新 更多