使用Java在双显示器配置上保持jframe打开

时间:2015-08-17 10:46:33

标签: java multiple-monitors

我有双显示器配置,我设法在所需的屏幕上打开我的Jframe

但问题是,每次点击我的主屏幕时,其他窗口都会最小化,但我需要始终处于最佳状态。

PS:我选中了永远在顶部的复选框

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[] gs = ge.getScreenDevices();

我是如何使用其他屏幕的。

1 个答案:

答案 0 :(得分:1)

只要我使用setFullScreenWindow,我就会遇到同样的问题。通过对话框替换帧可以解决问题,但我想你真的想拥有一个框架,而不是一个对话框。

因此解决方案是手动最大化帧而不是使用setFullScreenWindow:

import java.awt.*;
import javax.swing.*;

public class MultiMonitorFrame extends JFrame {

    public static void showFrameOnScreen(Window frame, int screen) {
        GraphicsEnvironment graphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment();
        GraphicsDevice[] graphicsDevices = graphicsEnvironment.getScreenDevices();
        GraphicsDevice graphicsDevice = ( screen > -1 && screen < graphicsDevices.length ) ? graphicsDevices[screen] : graphicsDevices.length > 0 ? graphicsDevices[0] : null;
        if (graphicsDevice == null)
        {
            throw new RuntimeException( "There are no screens !" );
        }
        Rectangle bounds = graphicsDevice.getDefaultConfiguration().getBounds();
        frame.setSize(bounds.width, bounds.height);
        frame.setLocation(bounds.x, bounds.y);
    }

    public static void main(String[] args) {
        JFrame frame1 = new JFrame("First frame");
        frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame1.setVisible(true);
        frame1.setAlwaysOnTop(true);
        JFrame frame2 = new JFrame("Second frame");
        frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame2.setVisible(true);
        frame2.setAlwaysOnTop(true);
        showFrameOnScreen(frame1, 1);
        showFrameOnScreen(frame2, 2);
    }
}

这会在一台显示器上显示两个帧,并且在使用ALT-Tab或单击桌面时帧不会被最小化。