0
在我的程序中,我有這個主窗口和一個幫助窗口。幫助窗口(打開時)無論焦點與否都始終保持在最佳狀態。但問題是,當我嘗試通過從HELP窗口觸發的動作偵聽器嘗試在主窗口中爲requestFocusInWindow()
組件時,它不會讓我這樣做。如何讓組件在背景窗口中保持焦點?
完成此操作的正確方法是什麼? TY :)
編輯:
按照要求,這裏有我想要完成一個簡短的例子。實質上,我需要幫助窗口中的按鈕觸發焦點到主窗口內的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(http://sscce.org/)演示該問題。在你的SSCCE中,MAIN框架將有一個按鈕來顯示HELP框架,並且幫助框架將有一個按鈕來請求重新聚焦在主框架按鈕上。先做好工作。 – camickr