1
次のコードでは、画面サイズをピクセルで取得するためにjava.awt.GraphicsDevice
とjavafx.stage.Screen
を使用しています。 Linuxでは、JavaFXが間違っているようです(Windows 7では正しい)。他の誰かが同じような見かけのバグを経験しているかどうかは知りたいです。私のシステム(UbuntuのMATE)でJavaFXは、Linux上で自分の画面サイズを誤って報告します。これはバグですか?
import javafx.application.Application;
import javafx.stage.*;
import java.awt.*;
public class DisplayCheck extends Application {
static int getScreenWidthViaAWT(int screenNum) {
GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[screenNum];
return gd.getDisplayMode().getWidth();
}
static int getScreenHeightViaAWT(int screenNum) {
GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[screenNum];
return gd.getDisplayMode().getHeight();
}
static int getScreenWidthViaJavaFX(int screenNum) {
return (int)Screen.getScreens().get(screenNum).getVisualBounds().getWidth();
}
static int getScreenHeightViaJavaFX(int screenNum) {
return (int)Screen.getScreens().get(screenNum).getVisualBounds().getHeight();
}
public static void main(String[] args) {
int w0 = getScreenWidthViaAWT(0);
int h0 = getScreenHeightViaAWT(0);
int w1 = getScreenWidthViaAWT(1);
int h1 = getScreenHeightViaAWT(1);
System.out.println ("\n\nScreen sizes from java.awt.GraphicsDevice:\n\nScreen 0: " + w0 + " x " + h0 + "\nScreen 1: " + w1 + " x " + h1);
w0 = getScreenWidthViaJavaFX(0);
h0 = getScreenHeightViaJavaFX(0);
w1 = getScreenWidthViaJavaFX(1);
h1 = getScreenHeightViaJavaFX(1);
System.out.println ("\n\nScreen sizes from javafx.stage.Screen:\n\nScreen 0: " + w0 + " x " + h0 + "\nScreen 1: " + w1 + " x " + h1);
launch(args);
}
public void start (Stage stage) {
System.exit(0);
}
}
、JavaFXのは718個のピクセルと私のラップトップ画面と私の外部モニタの両方の高さを誤って報告。 AWTはそれを正しく取得します。結果は以下の通りである:あなたがScreen.getVisualBounds
代わりのScreen.getBounds
を使用している
[email protected]:/java$ javac DisplayCheck.java
[email protected]:/java$ java DisplayCheck
Screen sizes from java.awt.GraphicsDevice:
Screen 0: 1024 x 768
Screen 1: 1920 x 1080
Screen sizes from javafx.stage.Screen:
Screen 0: 1920 x 718
Screen 1: 1024 x 718
[email protected]:/java$
OK、 'Screen.getBounds()'を呼び出すとサイズが正しくレポートされます。しかし、私はなぜ "視覚的境界"を得ることが "限界"から362ピクセルを引くべきなのだろうかと思います。この画面にはタスクバーやメニューなどはありません。また、AWTはスクリーンを別の方法で列挙します。 1920x1080は私のプライマリディスプレイですが、AWTは0ではなく1になります。@ fabianのおかげで私は正しい方法について訂正してくれました。 – John