gpt4 book ai didi

java - JFrame 的 getFocusOwner() 没有帮助

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

我正在使用 Swing 程序,但遇到了一些麻烦。该程序有两个窗口(都是 JFrames)。主窗口很好,应该与此问题无关。

我遇到问题的窗口包含一个带有 JPanel 的 JScrollPane,并且有一个 JMenuBar。 JPanel 上有一堆 JTextComponents(一些 JTextFields,一些 JTextAreas)。

我想要做的是将 ActionListener 附加到 JMenuItem 以找到具有焦点的 JTextComponent。

我在 focused component reference 看过之前的帖子和 How to find out which object currently has focus .我的问题是调用特定窗口的 getFocusOwner() 方法只会返回 JFrame 的 JRootPane,这毫无用处。根据它们的 isFocusable() 方法,所讨论的 JScrollPane 和 JPanel 都是可聚焦的。即使我在单击菜单项之前实际将文本输入到 JTextComponents 之一中,也会发生这种情况。当我打开菜单和所有内容时,光标仍在文本字段中闪烁。对于它的值(value),getMostRecentFocusOwner() 也只是返回 JRootPane。

最佳答案

如果您使用 TextActions, Action 知道哪个 JTextComponent 具有焦点。我修改了一些我发现的代码 here以表明即使 TextActions 来自一个 JTextArea,它们仍然会自动处理任何和所有具有焦点的文本组件:

import java.awt.GridLayout;
import javax.swing.*;

public class TextActionExample {
public static void main(String[] args) {

// Create a text area.
JTextArea ta = new JTextArea(15, 30);
ta.setLineWrap(true);

// Add all actions to the menu (split into two menus to make it more
// usable).
Action[] actions = ta.getActions();
JMenuBar menubar = new JMenuBar();
JMenu actionmenu = new JMenu("Actions");
menubar.add(actionmenu);

JMenu firstHalf = new JMenu("1st Half");
JMenu secondHalf = new JMenu("2nd Half");
actionmenu.add(firstHalf);
actionmenu.add(secondHalf);

int mid = actions.length / 2;
for (int i = 0; i < mid; i++) {
firstHalf.add(actions[i]);
}
for (int i = mid; i < actions.length; i++) {
secondHalf.add(actions[i]);
}

JTextField textField = new JTextField(20);
JPanel textFieldPanel = new JPanel();
textFieldPanel.add(textField);

JPanel mainPanel = new JPanel(new GridLayout(1, 0, 5, 5));
mainPanel.add(new JScrollPane(ta));
mainPanel.add(new JScrollPane(new JTextArea(15, 30)));
mainPanel.add(textFieldPanel);


// Show it . . .
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(mainPanel);
f.setJMenuBar(menubar);
f.pack();
f.setVisible(true);
}
}

这是非常有趣的东西,我必须了解更多。

关于java - JFrame 的 getFocusOwner() 没有帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11301130/

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