`

让JTextPane支持Ctrl+Z和Ctrl+Y

阅读更多


import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.event.UndoableEditEvent;
import javax.swing.undo.UndoManager;

public class Test extends JFrame. implements KeyListener {

    private JPanel jpContents = null;

    private JLabel jlTitle = null;

    private JLabel jlTitleEn = null;

    private JPanel jpButtom = null;

    private JButton jbSave = null;

    private JButton jbCancel = null;

    private JTextPane jtpContents = null;

    private JScrollPane jspContents = null;

    private UndoManager undomgr =new UndoManager() {
        public void undoableEditHappened(UndoableEditEvent e) {
            this.addEdit(e.getEdit());
        }
    };

    public Test() {
        init();
    }

    private void init() {

        JPanel jpNotes = new JPanel(new GridLayout(3, 1));
        jlTitle = new JLabel("编辑支持Ctrl+Z和Ctrl+Y的撤销/恢复操作。", JLabel.CENTER);
        jlTitleEn = new JLabel(
                "Editing supports undo(Ctrl+Z) and redo(Ctrl+Y).", JLabel.CENTER);
        jpNotes.add(new JLabel());
        jpNotes.add(jlTitle);
        jpNotes.add(jlTitleEn);

        jpContents = new JPanel(new BorderLayout());
        jtpContents = new JTextPane();
        jtpContents.getDocument().addUndoableEditListener(undomgr);
        jtpContents.addKeyListener(this);

        jtpContents.setText("");
        jtpContents.setFont(new Font(null, Font.BOLD, 16));
        jtpContents.setPreferredSize(new Dimension(760, 400));
        jtpContents.setSize(new Dimension(760, 400));
        jspContents = new JScrollPane(jtpContents);
        jspContents.setSize(new Dimension(760, 400));
        jspContents
                .setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

        jpContents.add(jpNotes, BorderLayout.NORTH);
        jpContents.add(jspContents, BorderLayout.CENTER);

        jpButtom = new JPanel(new FlowLayout());
        jbSave = new JButton("保存 Save");
        jbCancel = new JButton("取消 Cancel");
        jpButtom.add(jbSave);
        jpButtom.add(jbCancel);

        this.getContentPane().setLayout(new BorderLayout());
        this.getContentPane().add(jpContents, BorderLayout.NORTH);
        this.getContentPane().add(jpButtom, BorderLayout.CENTER);
        this.setBounds(350, 350, 780, 540);
        this.setMaximizedBounds(new Rectangle(new Dimension(780, 540)));
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }

    public static void main(String args[]) {
        new Test();
    }

    public void keyPressed(KeyEvent e) {
        if (e.getSource().equals(this.jtpContents)) {
            int keycode = e.getKeyCode();
            if (e.getModifiers() == KeyEvent.CTRL_MASK) {
                if (keycode == KeyEvent.VK_Z) {
                    if (undomgr.canUndo())
                        undomgr.undo();
                }
                if (keycode == KeyEvent.VK_Y) {
                    if (undomgr.canRedo())
                        undomgr.redo();
                }
            }
        }
    }

    public void keyReleased(KeyEvent e) {
    }

    public void keyTyped(KeyEvent e) {
    }

}

分享到:
评论

相关推荐

    JAVA-----JTextPane实例

    在Java Swing库中,`JTextPane`是一个功能强大的文本组件,它允许显示和编辑富文本格式,包括字体、颜色和排版等特性。本文将深入探讨`JTextPane`的基本概念、功能以及如何在Java应用程序中使用它。 #### 一、`...

    JTextPane使用

    JTextPane使用,可以传图片,文字等

    控制jEditorPane和jTextPane换行的演示程序

    在Java Swing库中,`JEditorPane`和`JTextPane`是两个常用的文本组件,它们主要用于显示和编辑富文本内容。在这个特定的程序中,我们看到的是一个演示如何控制这两类组件换行特性的应用。`JEditorPane`通常用于显示...

    关于JTextPane中进行搜索结果显示的问题及解决

    在Java Swing库中,`JTextPane`是一个用于显示和编辑富文本的组件,它可以处理包含格式化文本、图片和嵌入对象的文档。在处理大量文本时,我们经常需要实现搜索功能,以便用户能够快速查找特定的关键词或短语。然而...

    JTextPane 关键字变色

    要实现关键字变色,我们需要使用` StyledDocument `接口,它是`JTextPane`内部文档的抽象表示,支持样式和格式的管理。 1. **创建`StyledDocument`**:首先,你需要为`JTextPane`创建一个`StyledDocument`实例,...

    JTextPane--insert-Image.zip_JTextPane

    在Java Swing库中,`JTextPane`是一个高级文本组件,它允许用户处理富文本,包括格式化的文本、图像和嵌入对象。本项目提供的源码着重展示了如何在`JTextPane`中插入图片和艺术字,使得文本区域更加丰富多彩。`...

    JTable编辑器、渲染器及JTextPane着色、搜索实例——待办事项、日历及JSON格式化工具

    NULL 博文链接:https://icarusliu.iteye.com/blog/2098986

    JEditorPane/JTextPane常见操作(字体,颜色,字号,加粗,斜线,下划线,保存,行间距 等操作)以及HTML空格处理

    在Java的Swing库中,`JEditorPane`和`JTextPane`是两种非常重要的文本组件,它们允许用户编辑和显示富文本内容,包括不同的字体、颜色、字号、样式等。这两个组件都是`javax.swing.text`包的一部分,提供了丰富的...

    Swing实现编辑器(支持语法高亮)

    对于实现一个编辑器,JTextPane或JEditorPane更为合适,因为它们支持富文本格式,并且可以插入图像和其他多媒体内容。 语法高亮是提高代码可读性和编辑器用户体验的关键特性。在Swing中实现语法高亮,通常涉及到...

    根据Java语言编写的记事本,基本功能已经实现

    - 同时,程序还支持常用的快捷键操作,如Ctrl+S保存文件、Ctrl+O打开文件等,这些通过`KeyStroke`类实现。 6. **异常处理机制** - 在进行文件操作时可能会遇到各种异常情况,如文件不存在、权限不足等。 - 为了...

    一个用java编写的记事本小程序参考.pdf

    `JTextArea`是显示和编辑多行文本的组件,而`JTextPane`提供了更丰富的文本格式支持,如字体样式和颜色。`JScrollPane`用来包裹`JTextArea`,以便在内容超出可视区域时提供滚动功能。 事件监听是Java GUI中的关键...

    Java JTree+JTable应用

    `JTextPane`是Swing提供的一种文本组件,支持格式化文本,如富文本、链接等。在某些情况下,你可能需要将`JTree`或`JTable`中的数据解析为格式化的文本并显示在`JTextPane`中。而`JSplitPane`是一个布局管理器,用于...

    MyTextPane.rar_MyTextPane

    3. **JTextPane接口**:JTextPane类实现了此接口,提供了插入、删除、查找、替换等高级文本编辑功能,同时支持HTML和样式文本。 4. **事件处理**:为了响应用户的粘贴和复制操作,需要监听键盘事件和鼠标事件,通常...

    一个用java编写的记事本小程序参照.pdf

    6. **KeyStroke** 和 **KeyEvent**:`KeyStroke.getKeyStroke(KeyEvent.VK_N, KeyEvent.CTRL_MASK)` 用于设置快捷键,这里设置的是Ctrl+N作为“新建”操作的快捷键。 7. **ActionListener**:`ActionListener` 是...

Global site tag (gtag.js) - Google Analytics