我希望我没有发布重复的问题,但我找不到这样的问题,所以也许我很安全?无论如何。。。
对于我正在制作的应用程序,我将同时打开两个应用程序(两个单独的进程和窗口)。将在其上运行这些应用程序的计算机将具有多个监视器。我希望第一个应用程序/窗口全屏并占据我的一台显示器(简单的部分),而另一台应用程序/窗口在第二台显示器上全屏显示。如果可能的话,我希望他们以这种方式初始化。
目前,我正在使用以下代码使窗口全屏显示:
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 上调用 this:
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();
}
});
}
}