【发布时间】:2016-06-28 16:17:00
【问题描述】:
在我的程序中,我有这个主窗口和一个帮助窗口。帮助窗口(打开时)将始终保持在顶部,无论它是否处于焦点。然而问题是,当我尝试通过从 HELP 窗口触发的动作侦听器在主窗口中为组件发送 requestFocusInWindow() 时,它就是不允许我这样做。
实现此目的的正确方法是什么? 泰:)
编辑:
根据要求,这是我正在尝试完成的一个简短示例。本质上,我需要帮助窗口内的按钮来触发对主窗口内 TextField 的焦点。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Main {
public static void initGUI() {
mainFrame = new JFrame("Main");
helpFrame = new JFrame("Help");
mainFrame.setPreferredSize(new Dimension(500, 200));
helpFrame.setPreferredSize(new Dimension(500, 200));
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
helpFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setLayout(new FlowLayout());
helpFrame.setLayout(new FlowLayout());
mainTextView = new JTextField("", 20);
mainButton = new JButton("Open Help");
helpButton = new JButton("Request Focus");
mainButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(mainButton)) {
helpFrame.pack();
helpFrame.setVisible(true);
}
}
});
helpButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(helpButton))
System.out.println("Focus requested:" + mainTextView.requestFocusInWindow());
}
});
helpFrame.add(helpButton);
mainFrame.add(mainTextView);
mainFrame.add(mainButton);
mainFrame.pack();
mainFrame.setVisible(true);
}
public static void main(String[] args) {
initGUI();
}
static JFrame mainFrame, helpFrame;
static JTextField mainTextView;
static JButton mainButton, helpButton;
}
【问题讨论】:
-
发布您的SSCCE 来证明问题。在您的 SSCCE 中,主框架将有一个按钮来显示帮助框架,而帮助框架将有一个按钮来请求将焦点重新放在主框架按钮上。首先让它发挥作用。