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 Swing库中,`JTextPane`是一个功能强大的文本组件,它允许显示和编辑富文本格式,包括字体、颜色和排版等特性。本文将深入探讨`JTextPane`的基本概念、功能以及如何在Java应用程序中使用它。 #### 一、`...
JTextPane使用,可以传图片,文字等
在Java Swing库中,`JEditorPane`和`JTextPane`是两个常用的文本组件,它们主要用于显示和编辑富文本内容。在这个特定的程序中,我们看到的是一个演示如何控制这两类组件换行特性的应用。`JEditorPane`通常用于显示...
在Java Swing库中,`JTextPane`是一个用于显示和编辑富文本的组件,它可以处理包含格式化文本、图片和嵌入对象的文档。在处理大量文本时,我们经常需要实现搜索功能,以便用户能够快速查找特定的关键词或短语。然而...
要实现关键字变色,我们需要使用` StyledDocument `接口,它是`JTextPane`内部文档的抽象表示,支持样式和格式的管理。 1. **创建`StyledDocument`**:首先,你需要为`JTextPane`创建一个`StyledDocument`实例,...
在Java Swing库中,`JTextPane`是一个高级文本组件,它允许用户处理富文本,包括格式化的文本、图像和嵌入对象。本项目提供的源码着重展示了如何在`JTextPane`中插入图片和艺术字,使得文本区域更加丰富多彩。`...
NULL 博文链接:https://icarusliu.iteye.com/blog/2098986
在Java的Swing库中,`JEditorPane`和`JTextPane`是两种非常重要的文本组件,它们允许用户编辑和显示富文本内容,包括不同的字体、颜色、字号、样式等。这两个组件都是`javax.swing.text`包的一部分,提供了丰富的...
对于实现一个编辑器,JTextPane或JEditorPane更为合适,因为它们支持富文本格式,并且可以插入图像和其他多媒体内容。 语法高亮是提高代码可读性和编辑器用户体验的关键特性。在Swing中实现语法高亮,通常涉及到...
- 同时,程序还支持常用的快捷键操作,如Ctrl+S保存文件、Ctrl+O打开文件等,这些通过`KeyStroke`类实现。 6. **异常处理机制** - 在进行文件操作时可能会遇到各种异常情况,如文件不存在、权限不足等。 - 为了...
`JTextArea`是显示和编辑多行文本的组件,而`JTextPane`提供了更丰富的文本格式支持,如字体样式和颜色。`JScrollPane`用来包裹`JTextArea`,以便在内容超出可视区域时提供滚动功能。 事件监听是Java GUI中的关键...
`JTextPane`是Swing提供的一种文本组件,支持格式化文本,如富文本、链接等。在某些情况下,你可能需要将`JTree`或`JTable`中的数据解析为格式化的文本并显示在`JTextPane`中。而`JSplitPane`是一个布局管理器,用于...
3. **JTextPane接口**:JTextPane类实现了此接口,提供了插入、删除、查找、替换等高级文本编辑功能,同时支持HTML和样式文本。 4. **事件处理**:为了响应用户的粘贴和复制操作,需要监听键盘事件和鼠标事件,通常...
6. **KeyStroke** 和 **KeyEvent**:`KeyStroke.getKeyStroke(KeyEvent.VK_N, KeyEvent.CTRL_MASK)` 用于设置快捷键,这里设置的是Ctrl+N作为“新建”操作的快捷键。 7. **ActionListener**:`ActionListener` 是...