用于多个屏幕的 Java GUI 全屏

标签 java user-interface awt fullscreen monitors

我希望我没有发布重复的问题,但我找不到这样的问题所以也许我是安全的?无论如何...

对于我正在制作的应用程序,我将同时打开两个应用程序(两个独立的进程和窗口)。将运行这些应用程序的计算机将有多个监视器。我希望第一个应用程序/窗口全屏显示并占据我的一个显示器(简单部分),另一个在第二个显示器上全屏显示。如果可能的话,我希望他们以这种方式进行初始化。

目前,我正在使用以下代码使我的窗口全屏显示:

this.setVisible(false);
this.setUndecorated(true);
this.setResizable(false);
myDevice = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
myDevice.setFullScreenWindow(this);

它所在的类是 JFrame 类的扩展,myDevice 是“GraphicsDevice”类型。肯定有更好的方法可以让我的窗口全屏显示,这样我就可以在两个不同的显示器上全屏显示两个不同的应用程序。

如果我有任何不清楚的地方,请说出来,我会尝试编辑说明!

最佳答案

首先,您需要在每个屏幕设备上定位您的框架。

frame1.setLocation(pointOnFirstScreen);
frame2.setLocation(pointOnSecondScreen);

然后要最大化框架,只需在 JFrame 上调用它:

frame.setExtendedState(Frame.MAXIMIZED_BOTH);

这是一个工作示例来说明这一点:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Frame;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Point;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;

public class Test {
    protected void initUI() {
        Point p1 = null;
        Point p2 = null;
        for (GraphicsDevice gd : GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()) {
            if (p1 == null) {
                p1 = gd.getDefaultConfiguration().getBounds().getLocation();
            } else if (p2 == null) {
                p2 = gd.getDefaultConfiguration().getBounds().getLocation();
            }
        }
        if (p2 == null) {
            p2 = p1;
        }
        createFrameAtLocation(p1);
        createFrameAtLocation(p2);
    }

    private void createFrameAtLocation(Point p) {
        final JFrame frame = new JFrame();
        frame.setTitle("Test frame on two screens");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = new JPanel(new BorderLayout());
        final JTextArea textareaA = new JTextArea(24, 80);
        textareaA.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY, 1));
        panel.add(textareaA, BorderLayout.CENTER);
        frame.setLocation(p);
        frame.add(panel);
        frame.pack();
        frame.setExtendedState(Frame.MAXIMIZED_BOTH);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new Test().initUI();
            }
        });
    }

}

关于用于多个屏幕的 Java GUI 全屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10855163/

相关文章:

java - Java中实现类别的解决方案

java - 是否可以从数组中删除项目?

java - 国际象棋、棋盘翻转?

java - 创建具有硬件加速的表单应用程序

java - Swing 定时器与 Util 定时器

java - 为什么我在使用 lucene 时查询解析器总是出现错误

Java - 树,返回 arrayList 中的最大节点数

javascript - 如何根据其嵌套框调整图像大小

iOS:iMessage 样式的页眉和分隔线 UI

model-view-controller - 你知道 PAC 设计模式的任何例子吗?