Bildschirmauflösung !!!



  • Hallo Zusammen!
    Ich möchte in Java etwas programmmieren und zwar wenn man
    auf ein Button oder JButton klickt soll die Bildschirmauflösung z.B von 800x600 auf 1024x768
    verändert werden. Wie kann man mit Java soetwas realisieren?
    Danke für Eure Aufmerksamkeit.
    Grüße
    Tauboga



  • Du kannst ja mal folgendes ausprobieren (ich habe es aber selbst noch nicht getestet) :

    Hol dir mit der statischen Methode "getLocalGraphicsEnvironment" der Klasse GraphicsEnvironment ein entsprechendes Objekt und wende auf dieses Objekt die Methode "getDefaultScreenDevice" an. Auf das GraphicsDevice, welches du so kriegst kannst du die Methode "getDisplayModes" anwenden, welche dir ein Array der verfügbaren Display-Modes zurückliefert. Such dir den passenden Display-Mode heraus und setze ihn mit der Methode "setDisplayMode" der Klasse GraphicsDevice.

    Falls du das ausprobierst, sag danach mal Bescheid, ob es klappt. Ich habe es, wie gesagt, selbst nicht ausprobiert, es würde mich aber interessieren, ob es so klappt.

    ...das geht übrigens mit Sicherheit erst ab Java 1.4!



  • Also wie Gregor schon gesagt hat gilt dies erst ab JDK1.4 und dann auch nur im Fullscreen-Modus!

    [java]GraphicsDevice myDevice;
    Window myWindow;
    DisplayMode newDisplayMode;

    DisplayMode oldDisplayMode = myDevice.getDisplayMode();
    try {
    myDevice.setFullScreenWindow(myWindow);
    myDevice.setDisplayMode(newDisplayMode);
    ...
    } finally {
    myDevice.setDisplayMode(oldDisplayMode);
    myDevice.setFullScreenWindow(null);
    }[/code]Dies kann auch unter http://java.sun.com/docs/books/tutorial/extra/fullscreen/displaymode.html nachgelesen werden.



  • Hi!
    Vielen Dank an Gregor und Cengiz für die so schnelle Antworten.
    In einem anderen Forum bekam ich auf diese Frage diese Antwort
    und wollte eben wissen was Ihr dazu sagt.

    Re: Bildschirmauflösung ändern!!!!
    das Bekommst Du nur über JNI (Java Native Interface) hin,

    Also Du mußt dir eine C Routine schreiben die das mache und die Du von Java aufrufen kannst

    Wenn richtig wie schaut soeatwas aus??
    Danke
    Grüße



  • Tja wie schaut so etwas aus ... irgendwie so:

    [java]/*
    * Copyright (c) 2001 Sahin Computing Systems(R) AG, Germany.
    * All rights reserved.
    * Original Author: Cengiz Sahin
    * Date: 5th July 2002
    */

    /** Sample JNI-Implementation for switching resolution on WinX Systems...
    *
    * @author Cengiz Sahin
    * @version RevisionRevision
    */
    public class ResolutionSwitcher {

    static {
    System.loadLibrary("reschange");
    }

    /** Creates a new instance of ResolutionSwitcher */
    public ResolutionSwitcher() {
    }

    /** Native implementation of setResolution-Method */
    public native void setResolution(int resType);
    }[/cpp] Das ist der Java-Part ... nun kommt auch irgendwie noch der C bzw. C++-Part dran und das geht dann so:
    Man erzeugt sich mittels javah eine Header-Datei der Java-Klasse. Also beispielsweise

    javah -classpath . -jni ResolutionSwitcher
    

    Anschliessend bekommt man eine .h-Datei die folgenden Aufbau besitzt:

    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include <jni.h>
    /* Header for class ResolutionSwitcher */
    
    #ifndef _Included_ResolutionSwitcher
    #define _Included_ResolutionSwitcher
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     ResolutionSwitcher
     * Method:    setResolution
     * Signature: (I)V
     */
    JNIEXPORT void JNICALL Java_ResolutionSwitcher_setResolution
      (JNIEnv *, jobject, jint);
    
    #ifdef __cplusplus
    }
    #endif
    #endif
    

    Nun muss noch die Implementation dazu geschrieben werden, was in etwa so aussehen könnte ...

    #include "ResolutionSwitcher.h"
    #include <stdlib.h>
    
    JNIEXPORT void JNICALL Java_ResolutionSwitcher_setResolution (JNIEnv *env, jobject obj, jint param1)
    {
        // Hier deine Implementation fürs verändern der Auflösung!
    }
    

    Jetzt muss man die DLL (unter Windows) bzw. das .SO (shared object unter Unix/Linux) erzeugen. Das geht dann mit nem gängigen Compiler wie gcc:

    gcc -Wall -shared -I/usr/local/java/include -I /usr/local/java/include/genunix ResolutionSwitcher.c -o RESCHANGE.so
    

    Danach sollte man ein Shared-Object haben und die Klasse ResolutionSwitcher nutzen können.

    Have fun!



  • Hallo!
    Ich möchte mich beim Cengiz persönlich bedanken. Einfach toll dass
    du dir die Zeit genommen hast um mir die Frage so deutlich und klar
    zu erklären.
    Vielen Dank
    Grüße


Anmelden zum Antworten