如何使背景窗口中的组件保持清晰?

时间:2016-06-28 16:17:01

标签: java swing focus

在我的程序中,我有这个主窗口和一个帮助窗口。 HELP窗口(打开时)始终保持在顶部,无论它是否处于焦点位置。但问题是,当我通过从HELP窗口触发的动作侦听器尝试requestFocusInWindow() MAIN窗口中的组件时,它就不允许我这样做。

实现这一目标的正确方法是什么? 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 个答案:

答案 0 :(得分:0)

所以事实证明修复是相当微不足道的。如果使用requestFocus()代替requestFocusInWindow(),它似乎工作正常。

有点儿我花了多少时间感到愚蠢:P

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