- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个JTextPane
,它的工作方式(几乎)与 stackoverflow 上的标签输入字段完全相同。为此,一旦用户点击 Enter、Tab 或 Space,我就会将文本转换为组件。当然,我不希望任何这些字符实际输入到文本 Pane 中。我找到了这个解决方案,SSCCE:
import java.awt.Color;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextPane;
import javax.swing.KeyStroke;
import javax.swing.text.BadLocationException;
import javax.swing.text.Element;
import javax.swing.text.StyledDocument;
@SuppressWarnings("serial")
public class TagTextPane extends JTextPane {
public TagTextPane() {
this.getInputMap().put(KeyStroke.getKeyStroke("SPACE"), "finalizeTag");
this.getInputMap().put(KeyStroke.getKeyStroke("ENTER"), "finalizeTag");
this.getInputMap().put(KeyStroke.getKeyStroke("TAB"), "focusNext");
this.getActionMap().put("focusNext", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent arg0) {
finalizeTag();
transferFocus();
}
});
this.getActionMap().put("finalizeTag", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
finalizeTag();
}
});
}
private void finalizeTag() {
StyledDocument doc = (StyledDocument) getDocument();
Element element = doc.getCharacterElement(getCaretPosition() - 1);
int start = element.getStartOffset();
int len = element.getEndOffset() - start;
String tag = "";
try {
tag = this.getDocument().getText(start, len);
} catch (BadLocationException e) {
}
this.setSelectionStart(start);
this.setSelectionEnd(start + len);
JLabel label = new JLabel(tag);
label.setBorder(BorderFactory.createLineBorder(Color.BLACK));
this.insertComponent(label);
}
public static void main(String[] args) {
JFrame frame = new JFrame("TagTextPaneTest");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
TagTextPane tPane = new TagTextPane();
frame.setSize(400, 100);
frame.getContentPane().add(tPane);
frame.setVisible(true);
}
}
点击“tab”通常会导致插入制表符,点击“enter”通常会导致输入换行符,点击“space”则会导致输入空格。奇怪的是,我的代码停止输入换行符和制表符,但在执行预期操作时仍然允许正常输入空格。
最佳答案
this.getInputMap().put(KeyStroke.getKeyStroke("SPACE"), "finalizeTag");
这是处理空格字符的 keyPressed 事件。
您想要处理空格字符的 keyTyped 事件:
this.getInputMap().put(KeyStroke.getKeyStroke(' '), "finalizeTag");
关于java - 将某些字符/键的输入重新映射到 JTextComponent 的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15785107/
我正在使用 JEditorPane,(当然)当我使用抗锯齿和分数宽度绘制组件时,文本看起来好多了。换句话说: JEditorPane pane = new JEditorPane() { pu
我正在寻找一种方法,以多种字体和样式打印 JTextComponent 文本中的内容。例如:第一个标题具有更大的字体,然后是一个组件中不同样式的一些自定义文本 最佳答案 您可以使用JTextPane来
我需要创建一个从 JTextComponent(实际上是从 JTextPane)派生的类,其中至少有一个 default 键映射是变了。也就是说,在我的特殊 JTextPane 中,我希望“>”键击执
我正在寻找一种解决方案,可以根据用户 UI 内容动态生成文本和图像,然后通过简单的“一键点击”进行打印。 到目前为止,我的意图(经过一些研究)是创建一个 JTextComponent,其内容将根据用户
如何获取 JTextComponent 中第 7 个(例如)字符的位置(以像素为单位)? 最佳答案 Rectangle rectangle = textComponent.modelToView( 7
如何在任何JTextComponent(JTextArea、JTextPane)中显示换行符? 最佳答案 我猜你需要的是http://java-sl.com/showpar.html 它不仅显示标准符
我有名为“startTextBox1”的 jTextField 我使用下面的方法可以通过名称调用它; 在类里面创建 Hashmap。 private HashMap componentMap; 用组件
我正在尝试为我用 Java 开发的文本编辑器实现自动完成功能。为了实现自动完成,我需要已经在编辑器中输入的所有(不同的)单词。 直接的实现是将 JTextComponent 转换为字符串,然后进行标记
当我将焦点放在不可编辑的 JTextField 或 JTextPane 上时,如何消除声音? 每当我将焦点转移到不可编辑的 JTextPane 并按下 Enter 键时,就会播放相当于 Toolkit
通常当您双击一个文本组件时,整个单词都会被选中。 我想禁用对这个单个词的选择,但仍保持单击和拖动以选择它的能力。 示例:“敏捷的棕色狐狸跳过懒惰的狗” 当我从“The”的开头单击并拖动到“dog”的结
我同时使用 JLabel 和 JTextField,并且需要能够在应用程序显示时将我的 double 截断到小数点后两位。 如何执行此截断,最好不要切换到 JFormattedTextFields?
我使用的是 SCO OSR5 操作系统。我的java版本是1.4 在 JTextComponent 中输入数字键盘时,我遇到了一个非常奇怪的问题。 当我使用 VNC 连接时,一切正常。当我查看 VNC
许多环境中原生文本字段的正常行为如下: 带有文本“abcdefg”的文本域。我用鼠标从左到右选择“efg”。插入符号现在位于“g”后面。当我按一次光标左键将插入符号向左移动时,选择被删除并且插入符号位
考虑一个 JFormattedTextField(或者实际上是任何 JTextComponent),其中有一个前缀和一个后缀显示在字段的实际“文本”周围。 例如,双 3.5 将是字符串(通过格式化)“
我有一个 Settings 类,它应该提供用于检索设置并将其保存到文件中的接口(interface)。每当我更改输入值(而不是单击“保存”按钮后)时,我的设置都应该更新。这就是为什么我将此方法添加到
我正在开发一个JTextPane,它的工作方式(几乎)与 stackoverflow 上的标签输入字段完全相同。为此,一旦用户点击 Enter、Tab 或 Space,我就会将文本转换为组件。当然,我
这确实让我很困惑。 我有一个 JTextComponent,我使用 JPopupMenu 和 DefaultEditorKit.Cut\Copy\PasteAction() 添加了右键剪切\复制\粘贴
我是 Java 的新手,尤其是 Swing 库。当我尝试使用记事本演示(来自 JDK 的标准演示)时,我在尝试更改编辑器窗口中的文本时遇到了崩溃。我的示例代码: void Filter(Compone
我最近需要在单个 JScrollPane 的视口(viewport) View 中放置几个组件,其中有一个 JTextPane。 (如果有兴趣,请参阅详情 here)。 我将所有组件(两个 JPa
在 Swing 应用程序中,我使用带有 HTMLDocument 后端的 JTextPane。在某一时刻,我使用 以编程方式将某种占位符插入到文档中 document.insertString(...
我是一名优秀的程序员,十分优秀!