5

重複した質問を投稿していないことを願っていますが、このような質問を見つけることができなかったので、安全でしょうか? ともかく...

私が作成しているアプリケーションでは、2 つのアプリケーション (2 つの別々のプロセスとウィンドウ) を同時に開きます。これらのアプリケーションが実行されるコンピューターには、複数のモニターがあります。最初のアプリケーション/ウィンドウをフルスクリーンにしてモニターの1つを占有し(簡単な部分)、もう1つのモニターを2番目のモニターでフルスクリーンにしたい。できればこの方法で初期化してもらいたいです。

現時点では、次のコードを使用してウィンドウをフルスクリーンにしています。

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

これが含まれるクラスは JFrame クラスの拡張であり、myDevice は「GraphicsDevice」タイプです。2 つの異なるアプリケーションを 2 つの異なるモニターで全画面表示できるように、ウィンドウを全画面表示にするより良い方法がある可能性は確かにあります。

不明な点がある場合は、言ってください。説明を編集してみます。

4

1 に答える 1

5

まず、各スクリーン デバイスにフレームを配置する必要があります。

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();
            }
        });
    }

}
于 2012-06-01T18:07:17.957 に答える