Полноэкранный интерфейс Java для нескольких экранов
Я надеюсь, что я не публикую повторяющийся вопрос, но я не смог найти такой вопрос, так что, возможно, я в безопасности? Тем не мение...
Для приложений, которые я делаю, я собираюсь открыть два приложения (два отдельных процесса и окна) одновременно. Компьютер, на котором будут работать эти приложения, будет иметь несколько мониторов. Я хочу, чтобы первое приложение / окно работало в полноэкранном режиме и занимало один из моих мониторов (простая часть), а другое - полноэкранное на втором мониторе. Если возможно, я бы хотел, чтобы они инициализировали этот путь.
В настоящее время я делаю свои окна полноэкранными, используя этот код:
this.setVisible(false);
this.setUndecorated(true);
this.setResizable(false);
myDevice = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
myDevice.setFullScreenWindow(this);
Класс, в котором он находится, является расширением класса JFrame, а myDevice имеет тип "GraphicsDevice". Вполне возможно, что есть лучший способ сделать мое окно полноэкранным, чтобы у меня было два полноэкранных приложения на двух разных мониторах.
Если мне было непонятно каким-либо образом, скажите, пожалуйста, и я постараюсь отредактировать в пояснениях!
1 ответ
Во-первых, вам нужно расположить свои кадры на каждом экране устройства.
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();
}
});
}
}