- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
许多环境中原生文本字段的正常行为如下:
带有文本“abcdefg”的文本域。我用鼠标从左到右选择“efg”。插入符号现在位于“g”后面。当我按一次光标左键将插入符号向左移动时,选择被删除并且插入符号位于“e”之前。当我在 JTextField 或 JTextArea(在 Mac OS 上测试)中执行相同操作时,执行完全相同的操作会导致插入符号位于“g”之前。
我知道如何通过使用 KeyListener 并将其注册到每个组件来以编程方式更改它,但我正在寻找一种方法来更改我的整个应用程序。那可能吗?是否有我找不到的标志,或者我是否必须改变我的外观和感觉?
谢谢
最佳答案
I am looking for a way to change that for my entire application
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;
public class CaretAction extends TextAction
{
private boolean caretForward;
public CaretAction(boolean caretForward)
{
super(caretForward ? "Caret Forward" : "Caret Backward");
this.caretForward = caretForward;
}
public void actionPerformed(ActionEvent e)
{
JTextComponent textComponent = getFocusedComponent();
int start = textComponent.getSelectionStart();
int end = textComponent.getSelectionEnd();
int offset = textComponent.getCaretPosition();
if (start != end)
{
if (caretForward)
offset = (offset == end) ? offset + 1 : end;
else
offset = (offset == start) ? offset -1 : start;
}
else
{
offset += (caretForward) ? 1 : -1;
}
offset = Math.max(offset, 0);
offset = Math.min(offset, textComponent.getDocument().getLength());
textComponent.setCaretPosition( offset );
}
private static void createAndShowUI()
{
JTextField textField1 = new JTextField(10);
JTextField textField2 = new JTextField(10);
JPanel panel = new JPanel();
panel.add( textField1 );
panel.add( textField2 );
JFrame frame = new JFrame("SSCCE");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add( panel );
frame.pack();
frame.setLocationByPlatform( true );
frame.setVisible( true );
ActionMap map = (ActionMap)UIManager.get("TextField.actionMap");
map.put(DefaultEditorKit.backwardAction, new CaretAction(false));
map.put(DefaultEditorKit.forwardAction, new CaretAction(true));
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowUI();
}
});
}
}
您还需要更改 JTextArea、JFormattedTextField 的 ActionMap ...
关于java - 如何使 JTextComponent 的插入符号跳过选定的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15554728/
我正在使用 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(...
我是一名优秀的程序员,十分优秀!