gpt4 book ai didi

java - 如何检查 Swing 中的文本是否被选中?

转载 作者:行者123 更新时间:2023-11-30 03:05:49 25 4
gpt4 key购买 nike

我有简单的 JTextField 和 KeyListener。

JTextField textField = new JTextField();
textField.addKeyListener(new KeyListener() {

@Override
public void keyTyped(KeyEvent e)
{
}

@Override
public void keyPressed(KeyEvent e)
{
}

@Override
public void keyReleased(KeyEvent e)
{
validateThatTextWasSelectedWithShiftAndArrow();
}
});

如何检查某人是否使用组合键(SHIFT + 向左或向右箭头)选择了文本?

最佳答案

Swing 大量使用 Key Bindings API以便轻松使用现有功能。我们已经知道JTextField完全有能力执行选择,我们只需要能够插入它即可。

JTextField使用 selection-backwardselection-forward要在激活系统相关击键时执行所需的功能,我们只需将代码注入(inject)其中即可。

为此,我写了一个简单的ReplaceAction行动,需要旧的 Action我们感兴趣,并调用两个方法,一个在旧的 Action 之前,一个在旧的之后叫做。这允许您将所需的功能注入(inject)到实现您尝试实现的任何功能所需的任何点...

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.ActionMap;
import javax.swing.InputMap;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class MonitorSelection {

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

public MonitorSelection() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}

JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}

public class TestPane extends JPanel {

public TestPane() {
setLayout(new GridBagLayout());
JTextField field = new JTextField(10);
add(field);
InputMap im = field.getInputMap(WHEN_FOCUSED);
ActionMap am = field.getActionMap();

Action oldAction = am.get("selection-backward");
am.put("selection-backward", new ReplacedAction(oldAction){
@Override
protected void doAfterReplacedAction() {
System.out.println("Before selection-backward");
}

@Override
protected void doBeforeReplacedAction() {
System.out.println("After selection-backward");
}

});
oldAction = am.get("selection-forward");
am.put("selection-forward", new ReplacedAction(oldAction){
@Override
protected void doAfterReplacedAction() {
System.out.println("Before selection-forward");
}

@Override
protected void doBeforeReplacedAction() {
System.out.println("After selection-forward");
}

});
}

@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}

}

public class ReplacedAction extends AbstractAction {
private Action replaced;

public ReplacedAction(Action replaced) {
this.replaced = replaced;
}

@Override
public void actionPerformed(ActionEvent e) {
doBeforeReplacedAction();
replaced.actionPerformed(e);
doAfterReplacedAction();
}

protected void doBeforeReplacedAction() {
}

protected void doAfterReplacedAction() {
}

}

}

关于java - 如何检查 Swing 中的文本是否被选中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34786242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com