2016-06-28 41 views
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; 
    } 
+1

安置自己的[SSCCE(http://sscce.org/)演示該問題。在你的SSCCE中,MAIN框架將有一個按鈕來顯示HELP框架,並且幫助框架將有一個按鈕來請求重新聚焦在主框架按鈕上。先做好工作。 – camickr

回答

0

因此,原來的解決辦法是相當微不足道的。如果使用requestFocus()而不是requestFocusInWindow(),它似乎工作得很好。

有點兒覺得愚蠢多少時間我在這度過了:P

helpButton.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     if (e.getSource().equals(helpButton)) 
      mainTextView.requestFocus(); 
    } 
});