全画面Javaアプレットを作成する方法は?
-
08-07-2019 - |
質問
Javaアプレットを使用した心理実験を設計しています。 Javaアプレットをフルスクリーンにする必要があります。これを行うための最良の方法は何ですか、どのようにこれを行うことができます。
Javaアプレットを3年間使用していないので(最後に使用したのはコースの宿題でした:))、ほとんどの概念を忘れてしまいました。私はグーグルでそのリンクを見つけました: ダニウェブ
しかし、上記のリンクで説明した方法では、アプレット内にJFrameを配置する必要がありますが、その方法はわかりません。
手間がかからないため、迅速で汚い方法が必要な場合は何でも、これがここでそれを尋ねた理由です。
事前に感謝
解決
WebStartを使用したいと思います。ブラウザからデプロイできますが、それ以外は完全なアプリケーションです。ブラウザのようなセキュリティ制限がいくつかありますが、現在アプレットを使用しているので、それらは問題ではないと思います。
他のヒント
明白な答えは、アプレットを使用しないことです。 JFrameまたはJWindowをトップレベルコンテナとして使用するアプリケーションを作成します。アプレットをアプリケーションに変換するのは膨大な作業ではありません。アプレットは、他の何か、通常はWebページに埋め込まれるように設計されています。
すでにアプレットがあり、それを全画面表示にしたい場合、2つの迅速で汚いハックがあります:
1)。画面の解像度がわかっている場合は、HTMLでアプレットパラメータをそのサイズに設定し、ブラウザを全画面モードで実行します。
2)。 Webページではなくappletviewerでアプレットを実行し、appletviewerウィンドウを最大化します。
アプレットから新しいフレームを開き(「start()」メソッドから、またはできればユーザーが「開く」ボタンを押した後)、最大化するように設定するのはなぜですか?
JFrame frame = new JFrame();
//more initialization code here
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
frame.setSize(dim.width, dim.height);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
忘れないでください:JFrameを作成し、EDTから開く必要があります。アプレットのstart()はそのスレッドで呼び出されることが保証されていないため、SwingUtilities.invokeLater()を使用します。もちろん、ボタンルートを選択した場合、EDTでボタンリスナーが呼び出されるため、安全である必要があります。
解決策を見つけましたこの問題は問題なく機能します。 Linux 64ビット(ChromeおよびFirefox)およびWindows 7 64ビット(ChromeおよびExplorer)でテスト済み
唯一の問題は、アプレットがブラウザのすべてのスペースを使用し、ユーザーが全画面モードをオフにすると、アプレットがブラウザのサイズに拡大縮小されないことです。解決策は、フルスクリーンモードに入る前にアプレットの以前のサイズを保持し、アプレットが通常モードに戻ったときにこのサイズを設定することです。
public void setFullScreen() {
if (!this.fullscreen) {
size = this.getSize();
if (this.parent == null) {
this.parent = getParent();
}
this.frame = new Frame();
this.frame.setUndecorated(true);
this.frame.add(this);
this.frame.setVisible(true);
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[] devices = ge.getScreenDevices();
devices[0].setFullScreenWindow(this.frame);
this.fullscreen = true;
} else {
if (this.parent != null) {
this.parent.add(this);
}
if (this.frame != null) {
this.frame.dispose();
}
this.fullscreen = false;
this.setSize(size);
this.revalidate();
}
this.requestFocus();
}