# Vollbild-Bildschirmanpassung



## centrax (25. Jan 2011)

Hallo Forum,

ich habe folgenden Wunsch an mein Programm:
Ein JFrame wird über die GraphicDevice als Vollbildfenster gesetzt. Jetzt möchte ich jedoch, dass das Vollbildfenster sozusagen eine bestimmte Größe hat. Diese Größe soll eben nicht abhängig von der Größe des entsprechenden Bildschirms sein, sondern soll sich selbst einstellen lassen (also praktisch die Pixelhöhe y und Pixelbreite x des Bildschirms, sodass der Bildschirm - und damit das Fenster - nun x * y Pixel hat).

Ich hoffe, mein Problem ist verständlich, leider weiß ich nicht, wie ich das anders ausdrücken sollte...

Hier kurz der bisherige Kontakt mit der GraphicsDevice:


```
JFrame meinFrame; //Instanziiert und funktionierend

//Holen der GraphicsDevice
GraphicsEnvironment env = GraphicsEnvironment.
            getLocalGraphicsEnvironment();
GraphicsDevice[] devices = env.getScreenDevices();

//Den JFrame zum Vollbildfenster machen
devices[0].setFullScreenWindow(meinFrame);
```

Aber jetzt... wie kann ich nun den Bildschirm so anpassen, dass er zum Beispiel exakt 900*560 Pixel misst? Das geht, da bin ich mir sicher, aber wie???


Freue mich über jede Hilfe.

Liebe Grüße,
centrax


----------



## jgh (25. Jan 2011)

missverstanden^^, aber wer weiß...


```
package gui;

import java.awt.Color;
import java.awt.Dimension;

import javax.swing.JFrame;

public class TwoFrames {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new TwoFrames();

	}

	public TwoFrames() {
		JFrame fullScreen = new JFrame();
		fullScreen.setExtendedState(JFrame.MAXIMIZED_BOTH);
		fullScreen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		JFrame neunhundertX560 = new JFrame();
		neunhundertX560.setSize(new Dimension(900, 560));
		neunhundertX560.getContentPane().setBackground(Color.RED);
		neunhundertX560.setLocationRelativeTo(null);

		fullScreen.setVisible(true);
		neunhundertX560.setVisible(true);
	}
}
```


----------



## centrax (25. Jan 2011)

Leider ist das nicht das, was ich brauche...


Angenommen, ich habe folgendes Programm:


```
import java.awt.*;
import javax.swing.*;

/**
 *Fullscreen
 */
public class Fullscreen
extends JFrame{
    /**
     * Main-Meth
     */
    public static void main(String[] args) {
        new Fullscreen();
    }
    
    public Fullscreen() {
        super();
        
        //Holen der GraphicsDevice
        GraphicsEnvironment env = GraphicsEnvironment.
            getLocalGraphicsEnvironment();
        GraphicsDevice[] devices = env.getScreenDevices();
 
        //Den JFrame zum Vollbildfenster machen
        devices[0].setFullScreenWindow(this);
        
        repaint();
        
        setVisible(true);
    }
    
    @Override
    public void paint(Graphics g) {
        g.setColor(Color.red);
        g.fillRect(0, 0, 900, 500);
    }
}
```

ACHTUNG! Dieses Fenster killt sich nicht selber. Das muss mit Gewalt runtergedrückt werden.

Der BILDSCHIRM soll von seinen Einstellungen her nun so verändert werden, dass das Rechteck mit 900 auf 500 Pixeln den Bildschirm voll ausfüllt. Also soll der Bildschirm insgesamt nur noch 500 auf 900 Pixel fassen können. Das FENSTER soll nicht verändert werden...


Trotzdem vielen Dank für die verständliche und dazu noch wahnsinnig schnell Antwort!

Liebe Grüße,
centrax


----------



## darekkay (25. Jan 2011)

Ich verstehe leider nicht, was du genau machen willst ^^



> Jetzt möchte ich jedoch, dass das Vollbildfenster sozusagen eine bestimmte Größe hat. Diese Größe soll eben nicht abhängig von der Größe des entsprechenden Bildschirms sein, sondern soll sich selbst einstellen lassen


Das ist doch ein Widerspruch in sich. Ein VOLLBILDfenster hat eine Größe, und zwar die Größe des Bildschirms, sodass das Fenster auch wirklich das VOLLE BILD einnimmt ^^

Vielleicht dein Anliegen mit einem Beispiel erklären?

Meinst du vielleicht, dass x proportional zu y sein soll? Beispiel: Bildschirmauflösung: 1024/800, du willst aber, dass x = y, und willst das Fenster somit auf 800x800 setzen?

EDIT: aah, du willst also die Bildschirmauflösung des Rechners auf die Fenstergröße anpassen? Ich glaube, dass geht schon mal von der technischen Seite her nicht (immer). Angenommen, man hat keine zusätzlichen Treiber, so lassen sich unter Windows nur die nativen Auflösungen nutzen (800x600, 1024x800, ...). Mit den passenden Treibern lassen sich dann Sachen, wie Breitbild realisieren. Aber nicht jeder Treiber lässt eine beliebige (wie 900x500) Auflösung zu.


----------



## Wildcard (25. Jan 2011)

setDisplayMode auf dem GraphicsDevice


----------



## centrax (25. Jan 2011)

Ja, genau das will ich: Die Bildschirmauflösung soll genau der des Fensters entsprechen, und hierzu sollen möglichst viele mögliche Auflösungen möglich sein, im Bestfall jede erdenkliche.

Mit setDisplayMode() bin ich schon ein ganzes Stück weiter, Danke schonmal hierfür!

Diese Methode schmeißt allerdings ne Exception, wenn der zu setzende DisplayMode nicht im Array der Methode getDisplayModes() des GraphicDevice-Objektes ist.

Kurz: Ich kann nur die Auflösungsverhältnisse einstellen, die vom jeweiligen GraphicDevice-Objekt vorgegeben werden.

Eine bessere Möglichkeit - sprich vollkommen freies Bestimmen der Bildschirmauflösung - ist nicht möglich, oder?
Oder gibt es noch eine Alternative Möglichkeit zum Verstellen der Bildschirmauflösung?


Liebe Grüße,
centrax


----------



## darkeye2 (25. Jan 2011)

also weil es mich auch interessiert, ich nehme mal an, der Threadstarter meint das so, wie es bei vielen spielen ist, 
Spielt startet mit einer Auflösung von 800x600 (nur ein bsp. ) und wenn man es wieder beendet, ist die auflösung wieder so, wie sie vorher war, und die icons auf dem desktop sind nicht verschoben (was ja der fall ist, wenn man von einer großen auflösung zu ner kleinen geht und wieder zurück).

Geht das mit setDisplayMode()?


----------



## Wildcard (25. Jan 2011)

> Eine bessere Möglichkeit - sprich vollkommen freies Bestimmen der Bildschirmauflösung - ist nicht möglich, oder?
> Oder gibt es noch eine Alternative Möglichkeit zum Verstellen der Bildschirmauflösung?


Nein, der Grafikkartentreiber würde da nicht mitspielen . Das Array gibt dir an welche Auflösungen für dieses System möglich sind.



> Spielt startet mit einer Auflösung von 800x600 (nur ein bsp. ) und wenn man es wieder beendet, ist die auflösung wieder so, wie sie vorher war, und die icons auf dem desktop sind nicht verschoben (was ja der fall ist, wenn man von einer großen auflösung zu ner kleinen geht und wieder zurück).
> 
> Geht das mit setDisplayMode()?


Ja, dafür verwendet man setDisplayMode


----------

