如何在移动时强制JFrame留在后台?

时间:2015-07-04 20:03:15

标签: java swing

我制作了一个滑动的JFrame“app”。代码简单而简短,因为在我将代码放入主项目之前,它只是一个测试。

这对我来说几乎是完美的。只有一个问题,当滑出它的框架在顶部,但我希望它留在主窗口后面的背景中。 (它上面会有按钮,因此我必须在它出来后使用它)

以下是主窗口的代码:

public class Window {

    private JFrame frame;
    static Slider s;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Window window = new Window();
                    window.frame.setVisible(true);
                    s = new Slider();
                    s.setVisible(false);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public Window() {
        initialize();
    }

    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 501, 414);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
        JButton button = new JButton(">>>>");
        frame.getContentPane().add(button, BorderLayout.EAST);

        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                float x = frame.getX();
                float y = frame.getY()+55;
                for(int i = (int) x; i < x+500; i++){           
                    s.setVisible(true);
                    try {
                        Thread.sleep(1);
                        s.setBounds(i, (int) y, 450, 250);
                    } catch (InterruptedException e1) {
                        e1.printStackTrace();
                    }                   
                }
            }
        });


    }

}

//And here is the code of the slider: 

public class Slider extends JFrame {

    private JPanel contentPane;
    static Slider frame;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    frame = new Slider();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public Slider() {
        setAutoRequestFocus(false);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);

    }

}

(主应用程序无法调整大小,这就是为什么高度和宽度不变。)

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

您也可以使用:

frame.setAlwaysOnTop(true);

如果您不希望frame一直处于最佳状态,请在滑出后更改它。

答案 1 :(得分:0)

使用桌面窗格并在其上添加内部框架,桌面窗格将固定在背景上,您可以在内部框架上添加滑块。 桌面窗格将充当背景窗口..