2010-12-01 25 views
4

Hallo Ich schreibe ein Grafikprogramm und ich habe nach einem Weg gesucht, um die physische Größe des Bildschirms zu erhalten, der verwendet wird. Ich kann die Größe des Bildschirms in Pixel und auch die logische Auflösung erhalten. Was ich nicht finden kann, ist irgendwo die physischen Abmessungen zu bekommen, die immer in den Spezifikationen für jeden Monitor sind (zB 19 "- 376 x 301 mm). Frage, ist diese Information sogar irgendwo im OS gespeichert, wenn sie das lädt Treiber für den speziellen Bildschirm verwendet? Das Programm, das ich bin Bedürfnisse Schreiben auf Mac und Windows.Bildschirmgröße

Dank!

nt

Antwort

3

Ich glaube nicht, dass es mit Java möglich ist. Sie können versuchen, etwas jni-Code zu schreiben, wenn diese Funktion in Ihrem Programm unbedingt erforderlich ist. Fragen Sie den Benutzer andernfalls nach seiner Monitorgröße.

EDIT Sieht aus wie SWT können Ihnen DPI geben, und Sie können mit der Bildschirmgröße berechnen: http://www.java2s.com/Code/JavaAPI/org.eclipse.swt.graphics/DevicegetDPI.htm

Aber würden Sie haben SWT zu verwenden :) Was eigentlich gar nicht so schlechte Wahl ist, wenn Sie möchten gut aussehende Programme für Mac entwickeln.

+0

Wie wird JNI in diesem Fall helfen? hält OS diese Info? –

+0

Die SWT-Referenz klingt wirklich vielversprechend! Sicher, die SWT-Bibliothek ist nicht tragbar, aber es bietet eine Möglichkeit, die dpi zu erhalten, solange das reale Gerät diese Informationen anbietet (Drucker sollten, Bildschirme vielleicht auch). –

+0

@Andreas_D: SWT ist portabel, Sie verteilen Ihren Code einfach mit verschiedenen SWT-Bibliotheken für jede Plattform. –

1

Versuchen Sie dies, arbeiten

Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); 
+0

Von java doc: "Gibt die Größe des Bildschirms dieses Toolkits in Pixel zurück." –

+0

'Ich kann die Größe des Bildschirms in Pixel und auch die logische Auflösung erhalten.Was ich nicht finden kann, ist überall die physikalischen Abmessungen zu bekommen, die immer in den Spezifikationen für jeden Monitor sind (zB 19 "- 376 x 301 mm)." –

+0

Du hast die Antwort hier: http://stackoverflow.com/ a/15425239/1199154 ​​ – JoeYo

0

No way mit reines Java: Das Betriebssystem kümmert sich nicht um die physische Bildschirmgröße ist alles was es braucht. Mit nativem Code können Sie möglicherweise den Namen der angeschlossenen Anzeige vom Treiber abrufen und versuchen, die technischen Spezifikationen für diesen Typ zu suchen.

Wie Angus erwähnt - es kann sogar sein, dass OS oder Treiber einen dpi-Wert für den angeschlossenen Bildschirm angeben können, aber selbst im besten Fall muss der Bildschirm mindestens seine dpi/physischen Abmessungen angeben.

+0

Dies ist nicht richtig.Das Betriebssystem kann und weiß oft die physikalische Bildschirmgröße und DPI.PIPI-aware-Anwendungen können dies verwenden, um Dinge mit Größen in physischen Dimensionen anstelle von Pixeln angegeben. – Angus

+0

Diese Antwort ist falsch Toolkit hat Methode getScreenSize(). – AlexR

+0

@AlexR - bitte werfen Sie einen Blick auf die JavaDoc: Von Java Doc: "Zurück: die Größe des Toolkits Bildschirm in Pixel." - Ntmp ** nicht ** fragen Pixel, aber für physische Dimensionen –

1

OK, nach den Kommentaren von Andreas habe ich eine Suche durchgeführt und eine Lösung für Windows gefunden. Sie können WMI verwenden. WMI kann von Java aus mit einem der Interoperabilitätswerkzeuge (jinterop, jintegra, jawin) oder durch Ausführen eines externen Skripts (VBScript oder JScript) aufgerufen werden. Das folgende Skript ist ein Beispiel:

strComputer = "." 
Set objWMIService = GetObject("winmgmts:" _ 
    & "{impersonationLevel=impersonate}!\\" _ 
    & strComputer & "\root\cimv2") 
Set colSoftware = objWMIService.ExecQuery _ 
    ("Select * from Win32_DesktopMonitor") 

For Each objSoftware in colSoftware 
    Wscript.Echo "Caprion: " & objSoftware.Caption 
    Wscript.Echo "Description: " & objSoftware.Description 
    Wscript.Echo "PixelsPerXLogicalInch: " & objSoftware.PixelsPerXLogicalInch 
    Wscript.Echo "ScreenWidth: " & objSoftware.ScreenWidth 
Next 

speichert es in der Datei screen.vbs und führen Sie es Befehlszeile cscript screen.vbs mit Dann Screen/PixelsPerXLogicalInch gibt Sie in Zoll Breite.

Weitere Informationen finden Sie unter [http://msdn.microsoft.com/en-us/library/aa389273%28v=VS.85%29.aspx][1]. Ich glaube, dass diese Lösung auch für andere Betriebssystemtypen existiert.

0

Verwenden Sie die getScreenResolution()-Methode der Toolkit Klasse, die die Bildschirmauflösung in dots-per-inch zurückgibt. (ref javadocs)

3

In SWT können Sie getShell() verwenden. getDisplay(). getPrimaryMonitor(). getClientArea();

final Display display = getShell().getDisplay(); 
    final Monitor monitor = display.getPrimaryMonitor(); 
    final Rectangle rect; 
    if (monitor != null) { 
     rect = monitor.getClientArea(); 
    } else { 
     // In case we cannot find the primary monitor get the entire display rectangle 
     // Note that it may include the dimensions of multiple monitors. 
     rect = display.getBounds(); 
    } 
    System.out.println("Monitor width=" + String.valueOf(rect.width)); 
    System.out.println("Monitor height=" + String.valueOf(rect.height)); 
0

können Sie versuchen, zu verwenden:

Dimension screen = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); 
int pixelPerInch= java.awt.Toolkit.getDefaultToolkit().getScreenResolution(); 
double height=screen.getHeight()/pixelPerInch; 
double width=screen.getWidth()/pixelPerInch; 
double x=Math.pow(height,2); 
double y=Math.pow(width,2); 
double diagonal= Math.sqrt(x+y); 

Die "Diagonale" Wert in Zoll.