`
lg_asus
  • 浏览: 191886 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

UndoableEditListener 和 DocumentListener

阅读更多
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.undo.*;
import javax.swing.text.*;

public class JTextAreaDemo3 extends JFrame implements UndoableEditListener,DocumentListener{
	
	private UndoableEdit edit;
	private JTextArea jta;
	private JMenuItem undoitem;
	private JMenuItem redoitem;
	private JTextArea message;
	
	public JTextAreaDemo3(){
		super("JTextAreaDemo3");
		jta = new JTextArea();
		jta.getDocument().addUndoableEditListener(this);
		jta.getDocument().addDocumentListener(this);
		message = new JTextArea();
		message.setEditable(false);
		
		JPanel p1 = new JPanel();
		p1.setLayout(new GridLayout(1,1));
		p1.setBorder(BorderFactory.createTitledBorder("Edit Area"));
		p1.add(new JScrollPane(jta));
		
		JPanel p2 = new JPanel();
		p2.setLayout(new GridLayout(1,1));
		p2.setBorder(BorderFactory.createTitledBorder("Message"));
		p2.add(new JScrollPane(message));
		
		this.getContentPane().setLayout(new GridLayout(2,1));
		this.getContentPane().add(p1);
		this.getContentPane().add(p2);
		
		JMenuBar bar = new JMenuBar();
		JMenu theMenu = new JMenu("Edit");
		undoitem = new JMenuItem("Undo");
		redoitem = new JMenuItem("Redo");
		theMenu.add(undoitem);
		theMenu.add(redoitem);
		bar.add(theMenu);
		updateMenuItem();//////////////
		
		this.setJMenuBar(bar);
		this.setSize(300,300);

		undoitem.addActionListener(new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent e){
				edit.undo();
				updateMenuItem();
				message.append("-Undo-\n");
				
			}
		});
		
		redoitem.addActionListener(new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent e){
				edit.redo();
				updateMenuItem();
				message.append("-Redo-\n");
			}
		});
		
	}
	
	@Override
	public void undoableEditHappened(UndoableEditEvent e){
		StringBuffer sb = new StringBuffer(200);
		edit = e.getEdit();
		//sb.append("undoableEdit");
		sb.append(edit.getPresentationName());
		sb.append("\n");
		message.append(sb.toString());
		updateMenuItem();
	}
	@Override
	public void changedUpdate(DocumentEvent e){
		showDE(e);
	}
	@Override
	public void insertUpdate(DocumentEvent e){
		showDE(e);
	}
	@Override
	public void removeUpdate(DocumentEvent e){
		showDE(e);
	}
	public void updateMenuItem(){
		if(edit!=null){
			undoitem.setEnabled(edit.canUndo());
			redoitem.setEnabled(edit.canRedo());
			undoitem.setText(edit.getUndoPresentationName());
			redoitem.setText(edit.getRedoPresentationName());
		}else{
			undoitem.setEnabled(false);
			redoitem.setEnabled(false);
			undoitem.setText("Undo");
			redoitem.setText("Redo");
		}
	}
	public void showDE(DocumentEvent e){
		StringBuffer sb = new StringBuffer(100);
		sb.append(e.getType());
		sb.append("Offset:");
		sb.append(e.getOffset());
		sb.append("Length:");
		sb.append(e.getLength());
		
		Element Eroot = jta.getDocument().getDefaultRootElement();
		DocumentEvent.ElementChange Echange = e.getChange(Eroot);
		if(Echange==null){
			sb.append("No Element Change");
			
		}else{
			sb.append("Element Chage:index");
			sb.append(Echange.getIndex());
		}
		sb.append("\n");
		message.append(sb.toString());
		
	}
	public static void main(String...args){
		JFrame jf = new JTextAreaDemo3();
		jf.setVisible(true);
		jf.addWindowListener(new WindowAdapter(){
			@Override
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
		});
	}
}


參考:深入淺出Java Swing程序設計
分享到:
评论

相关推荐

    java swing-DocumentListener的使用

    使用 DocumentListener 可以监听并响应文档的变化事件,包括插入、删除和属性改变等操作。以下是一个更详细的示例,演示如何在文本框中实时显示字符数量:

    JAVA版源代码归类.pdf

    2. **事件监听**:Notepad4实现了ActionListener和DocumentListener接口,用于处理用户在界面上的交互。ActionListener用于响应用户点击菜单项或按钮的事件,而DocumentListener则监听文本编辑区的内容变化,以便...

    毕业设计JAVA记事本源代码.doc

    首先,`Notepad4`类继承自`JFrame`,并实现了`ActionListener`和`DocumentListener`接口。`ActionListener`用于监听用户在菜单或按钮上的点击事件,而`DocumentListener`则用于监听文本内容的变化。 1. **菜单和子...

    Java仿windows记事本源码.pdf

    - 文本区域可能包含监听器,例如`CaretListener`来监听光标移动,`DocumentListener`来监听文本更改,以及`UndoableEditListener`来支持撤销/重做功能。 4. **菜单和菜单项**: - 应用程序包含一个`JMenuBar`,...

    动态获取文本框输入的值

    为了实现在不触发键盘事件的情况下动态获取文本框中的输入值,我们通常会使用`DocumentListener`接口。`DocumentListener`是Swing包中的一个接口,它提供了一种监听文档变化的机制。当文档发生变化时(例如用户在...

    Swing事件源可能触发的事件

    `DocumentListener`用于监听文档内容的变化,`UndoableEditListener`处理撤销/重做操作,而`HyperlinkListener`则处理超链接的点击事件。 6. **JComboBox**: 下拉列表组件触发`ActionEvent`和`ItemEvent`,当用户...

    JTextField输入时实现位数监听

    `DocumentListener`有三个方法:`insertUpdate()`, `removeUpdate()`, 和 `changedUpdate()`。这三个方法会在文档内容插入、删除或改变时被调用。 下面是一个简单的`DocumentListener`实现示例: ```java class ...

    Java组件实现计算数的和及平均数.doc

    每当文本区域的内容改变时,`DocumentListener`的`insertUpdate()`、`removeUpdate()`和`changedUpdate()`方法会被调用。在这个例子中,我们可以利用这些方法来更新计算结果。 程序源代码中,`Computer`类继承自`...

    Java组件实现计算数的和及平均数.docx

    4. 通过创建 DocumentListener 监视器来调用程序中的算法实现对第一个文本区中数字进行加法和求平均值的计算,并使其结果显现在第二个文本区中,同时在算法的执行过程中抓取异常并显示。 程序源代码 该设计的程序...

    基于Java实现利用GUI界面布局实现一个小的打字得分游戏.zip

    在本项目中,我们主要探讨的是如何利用Java编程语言,结合图形用户界面(GUI)来设计和实现一个简单的打字得分游戏。这是一个典型的Java课程设计项目,旨在帮助学习者掌握Java GUI编程的基本概念和技巧。 首先,...

    网上搜的Java记事本程序源代码.doc

    它还实现了 `ActionListener` 和 `DocumentListener` 接口,表明这个类能够响应用户在界面上的交互动作,并监听文本的更改。 1. **菜单栏和菜单项**: - 使用 `JMenu` 和 `JMenuItem` 创建了文件(mFile)、编辑...

    java2 实用教程(第三版) 实验指导 上机实验7 组件及事件处理(2)

    4. Font类和Swing中的文本组件,如JTextComponent和DocumentListener。 5. 数学计算,例如二次方程的求解。 6. 数据结构,如ArrayList,用于存储和操作数据。 通过实践这些实验,你不仅能加深对Java GUI编程的理解...

    java记事本doc

    4. **事件处理**:`java.awt.event`包中的监听器如`ActionListener`和`DocumentListener`用于响应用户的交互。例如,当用户输入文本时,`DocumentListener`会触发更新,检查是否需要保存更改。 5. **对话框设计**:...

    java记事本程序设计

    6. **JTextArea和DocumentListener** `NoteBook.java`和`Demo.java`可能涉及到文本编辑功能。`JTextArea`是显示多行文本的组件,可以编辑和查看文本。为了实时更新用户输入,可以添加`DocumentListener`,监听文本...

    java 记事本

    - **EventListener接口**:所有Java事件处理器的基接口,包括ActionListener和DocumentListener。 6. **设计模式** - **Model-View-Controller(MVC)**:Java记事本项目可能采用MVC模式,其中模型负责数据处理,...

    java文本框自动提示

    使用`DocumentListener`,你可以监听到文本框内容的插入、删除和替换操作。首先,你需要创建一个实现了`DocumentListener`接口的类,重写其`insertUpdate()`, `removeUpdate()` 和 `changedUpdate()` 方法。这些...

    java文本编辑器[收集].pdf

    - 类`Notepad`继承自`JFrame`,实现了`ActionListener`、`ItemListener`和`DocumentListener`接口,包含了文本编辑器的主要逻辑。 - 其他辅助类如`MyFile`、`MyEdit`和`MyForm`分别负责文件操作、编辑功能和表单...

    心兰记事本

    同时,事件监听机制,如ActionListener和DocumentListener,被用于处理用户的输入和操作,确保及时响应和执行相应的功能。 样式更改功能的实现可能涉及到富文本处理。Java的javax.swing.text包提供了对富文本的支持...

    java的swing 自学例题~

    本教程将围绕Java Swing的自学例题展开,帮助你深入理解和掌握Swing的基本用法。 首先,Swing组件是轻量级的,这意味着它们不依赖于操作系统提供的GUI组件,而是由Java完全实现。这使得Swing应用具有更好的跨平台...

    历史学swing用户界面组件PPT学习教案.pptx

    例如,在一个简单的应用程序中,可以创建两个JTextField,分别接收用户的输入,然后通过DocumentListener监听这两个文本框的变化,当检测到内容更改时,计算两个文本框内容的和,并将结果显示在第三个JTextField中。...

Global site tag (gtag.js) - Google Analytics