getFullScreenMode()

Status
Nicht offen für weitere Antworten.

Reality

Top Contributor
Hi,
erst mal der Code:

Code:
  //Restore the screen´s display mode.
  public void restoreScreen(){
    Window window = device.getFullScreenWindow();

    if(window != null){
      window.dispose(); //dispose = einrichten
    }

    device.setFullScreenWindow(null);
  }

Diese Methode geht wieder ins normale Modus über, also nicht mehr Vollbildmodus.

Da heisst es aber:
Code:
Window window = device.getFullScreenWindow();
Wenn ich im Vollbildmodus bin, gibt er doch die Werte des Vollbilds zurück. Für was ist das also gut?

Liebe Grüße
Reality
 

Grizzly

Top Contributor
Die Methode setFullScreenWindow setzt das Fenster für den Vollbild-Modus. Wen man null als Parameter übergibt, deaktiviert man den Vollbild-Modus. Und das aktuelle Vollbild-Modus-Fenster bekommt man mit getFullScreenWindow.

So gibt folgender Code-Fetzen:
Code:
Window window = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getFullScreenWindow();
System.out.println("window = " + window);
nämlich window = null zurück, da ja davor kein Vollbild-Modus-Fenster gesetzt worden ist.
 

Reality

Top Contributor
Hi,
Grizzly hat gesagt.:
nämlich window = null zurück, da ja davor kein Vollbild-Modus-Fenster gesetzt worden ist.
ich habe ja nur ein Code-Ausschnitt gepostet. Wenn diese Methode ausgeführt wird, bin ich im Vollbildmodus. Aber .getFullScreenWindow() gibt doch nur das Window-Objekt des Vollbildmodus zurück.
Was ist der Zweck? (Der Code ist nicht von mir uns er funktioniert).

Liebe Grüße
Reality
 

Reality

Top Contributor
Hi Beni,
danke mal wieder. :)
Warum läuft die Anwendung im Hintergrund noch weiter, wenn ich die if-Anweisung und somit den dispose()-Befehl weglasse?

Liebe Grüße
Reality
 
B

Beni

Gast
Dann wird ja nur dieser Teil ausgeführt:
Code:
device.setFullScreenWindow(null);

... und der besagt nur, dass es kein Vollbildschirmfenster mehr gibt. Das ehemalige Fenster wird halt einfach verkleinert, und läuft so weiter.
 

Reality

Top Contributor
Hi,
kann mir jemand erklären, warum hier von wait() und notify() die Rede ist, obwohl nur ein Thread läuft?
Dann wäre noch hilfreich, wenn ihr mir verratet was es bedeutet, wenn einer Zahl ein "f" angehängt wird.

Code:
import java.awt.*;
import javax.swing.ImageIcon;
import javax.swing.JFrame;

public class ImageSpeedTest extends JFrame {

    public static void main(String args[]) {

        DisplayMode displayMode;

        if (args.length == 3) {
            displayMode = new DisplayMode(
                Integer.parseInt(args[0]),
                Integer.parseInt(args[1]),
                Integer.parseInt(args[2]),
                DisplayMode.REFRESH_RATE_UNKNOWN);
        }
        else {
            displayMode = new DisplayMode(800, 600, 16,
                DisplayMode.REFRESH_RATE_UNKNOWN);
        }

        ImageSpeedTest test = new ImageSpeedTest();
        test.run(displayMode);
    }

    private static final int FONT_SIZE = 24;
    private static final long TIME_PER_IMAGE = 1500;

    private SimpleScreenManager screen;
    private Image bgImage;
    private Image opaqueImage;
    private Image transparentImage;
    private Image translucentImage;
    private Image antiAliasedImage;
    private boolean imagesLoaded;

    public void run(DisplayMode displayMode) {
        setBackground(Color.blue);
        setForeground(Color.white);
        setFont(new Font("Dialog", Font.PLAIN, FONT_SIZE));
        imagesLoaded = false;

        screen = new SimpleScreenManager();
        try {
            screen.setFullScreen(displayMode, this);
            synchronized (this) {
                loadImages();
                // wait for test to complete
                try {
                    wait();
                }
                catch (InterruptedException ex) { }
            }
        }
        finally {
            screen.restoreScreen();
        }
    }


    public void loadImages() {
        bgImage = loadImage("images/background.jpg");
        opaqueImage = loadImage("images/opaque.png");
        transparentImage = loadImage("images/transparent.png");
        translucentImage = loadImage("images/translucent.png");
        antiAliasedImage = loadImage("images/antialiased.png");
        imagesLoaded = true;
        // signal to AWT to repaint this window
        repaint();
    }


    private final Image loadImage(String fileName) {
        return new ImageIcon(fileName).getImage();
    }


    public void paint(Graphics g) {
        // set text anti-aliasing
        if (g instanceof Graphics2D) {
            Graphics2D g2 = (Graphics2D)g;
            g2.setRenderingHint(
                RenderingHints.KEY_TEXT_ANTIALIASING,
                RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
        }

        // draw images
        if (imagesLoaded) {
            drawImage(g, opaqueImage, "Opaque");
            drawImage(g, transparentImage, "Transparent");
            drawImage(g, translucentImage, "Translucent");
            drawImage(g, antiAliasedImage,
              "Translucent (Anti-Aliased)");

            // notify that the test is complete
            synchronized (this) {
                notify();
            }
        }
        else {
            g.drawString("Loading Images...", 5, FONT_SIZE);
        }
    }


    public void drawImage(Graphics g, Image image, String name) {
        int width = screen.getFullScreenWindow().getWidth() -
            image.getWidth(null);
        int height = screen.getFullScreenWindow().getHeight() -
            image.getHeight(null);
        int numImages = 0;

        g.drawImage(bgImage, 0, 0, null);

        long startTime = System.currentTimeMillis();
        while (System.currentTimeMillis() - startTime
            < TIME_PER_IMAGE)
        {
            int x = Math.round((float)Math.random() * width);
            int y = Math.round((float)Math.random() * height);
            g.drawImage(image, x, y, null);
            numImages++;
        }
        long time = System.currentTimeMillis() - startTime;
        float speed = numImages * 1000f / time;
        System.out.println(name + ": " + speed + " images/sec");

    }

}
 
B

Beni

Gast
Reality hat gesagt.:
kann mir jemand erklären, warum hier von wait() und notify() die Rede ist, obwohl nur ein Thread läuft?
Die graphische Oberfläche sorgt noch für eine ganze Menge zusätzlicher Threads, die werden hier ausgenutzt (benutz mal einen guten Debugger, du wirst erstaunt sein, was da noch alles im Hintergrund abläuft :wink: )

Reality hat gesagt.:
Dann wäre noch hilfreich, wenn ihr mir verratet was es bedeutet, wenn einer Zahl ein "f" angehängt wird.
Dann ist sie ein Float:
Code:
float blupp = 12.34f; // funktioniert
float bla = 12.34; // Compilererror, weil ein Double keinem Float ohne Cast zugewiesen werden kann.
 

Reality

Top Contributor
Verstehen ist möglich; durch Beni. :applaus:

Oder:

Lern lesen und schreiben mit Beni. :)

*Orden überreich* [schild=11 fontcolor=000000 shadowcolor=C0C0C0 shieldshadow=1]Orden für gute Leistung und Treue[/schild]

Liebe Grüße
Reality
 
B

Beni

Gast
danke.gif
 

Illuvatar

Top Contributor
In meinem Subforum wird diesem Ursupator (oder so ähnlich :wink: ) kein Orden überreicht! *lösch* :bae:
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben