gpt4 book ai didi

java - 哪个文本输入组件最后获得了焦点?

转载 作者:搜寻专家 更新时间:2023-11-01 02:16:20 27 4
gpt4 key购买 nike

假设我有一个 Java 应用程序,它有多个组件,您可以在其中输入文本。现在假设此应用程序还有一个对话框,可让您将单个字符插入到这些组件中(类似于 Word 中从“编辑”菜单中选择“插入”时出现的对话框)。您希望它将字符插入到最后具有焦点的任何文本组件中。

但是您如何知道最后获得焦点的是哪个文本组件?

我可以手动跟踪这一点,方法是让每个文本组件在获得焦点时向应用程序报告,然后让应用程序将新字符插入到最后获得焦点的任何组件中。

但这一定是一个常见问题(考虑工具栏中的粘贴按钮——它如何知道将其粘贴到哪里?)。 Swing 中是否已经内置了一些东西,可以让您获得最后一个具有焦点的文本组件的句柄?还是我需要自己写这个?

最佳答案

Is there something already built in to Swing that lets you get a handle to the last text component that had the focus?

您创建一个扩展 TextAction 的 Action 。 TextAction 类有一个方法,可让您获取获得焦点的最后一个文本组件。

编辑:

您可以创建自己的 Action 并做任何您想做的事情。然后可以将 Action 添加到任何 JMenuItem 或 JButton。例如:

class SelectAll extends TextAction
{
public SelectAll()
{
super("Select All");
}

public void actionPerformed(ActionEvent e)
{
JTextComponent component = getFocusedComponent();
component.selectAll();
}
}

如果您只想在文本字段的插入符号位置插入一个字符,那么您可以这样做

component.replaceSelection(...);

编辑 2:

我不明白这个答案有什么困惑。这是一个简单的例子:

  1. 选择一些文字
  2. 用鼠标点击复选框
  3. 使用 Tab 键或使用鼠标单击“剪切”按钮

当调用 Action 时,文本字段当前没有焦点并不重要。 TextAction 跟踪最后一个获得焦点的文本组件。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;

public class TextActionTest extends JFrame
{
JTextField textField = new JTextField("Select Me");
JTabbedPane tabbedPane;

public TextActionTest()
{
add(textField, BorderLayout.NORTH);
add(new JCheckBox("Click Me!"));
add(new JButton(new CutAction()), BorderLayout.SOUTH);
}

public static void main(String[] args)
{
TextActionTest frame = new TextActionTest();
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.pack();
frame.setLocationRelativeTo( null );
frame.setVisible(true);
}

class CutAction extends TextAction
{
public CutAction()
{
super("Click to Cut Text");
}

public void actionPerformed(ActionEvent e)
{
JTextComponent component = getFocusedComponent();
// JTextComponent component = getTextComponent(e);
component.cut();
}
}
}

关于java - 哪个文本输入组件最后获得了焦点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5668690/

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