Hallo,
es ist ein leidiges Thema, aber ich fange trotzdem damit an: Der Fullscreen.
Ich habe es bereits geschafft mittels Combobox und Button (aus Swing) in meiner Applikation zur Laufzeit die Auflösung zu Switchen.
So.
Wie man hier bereits vermutet, verwende ich die drei Klassen GraphicsEnvironment, GraphicsDevice und DisplayMode, um in den Fullscreenmode zu kommen.
Ich möchte mir nun alle möglichen Auflösungen meiner Grafikkarte anzeigen lassen und mir dann diejenigen, die ich verwenden möchte rauspicken.
Die Methode getDefaultScreenDevice() liefert ja nur die aktuelle Auflösung des Desktops und mit getScreenDevices() komme ich irgendwie nicht zurecht. Letzteres ist ja ein eindimensionales Array von dem ich dachte einfach durchiterieren zu können, aber das funktionierte nicht.
Wie verwendet man die Methode getScreenDevices() richtig?
Außerdem entstehen beim Switchen der Auflösung beispielsweise auf 800x600 unschöne Balken an der linken bzw. rechten Seite, wie verhindert man das?
Hier mal das was ich testeshalber habe als Code:
es ist ein leidiges Thema, aber ich fange trotzdem damit an: Der Fullscreen.
Ich habe es bereits geschafft mittels Combobox und Button (aus Swing) in meiner Applikation zur Laufzeit die Auflösung zu Switchen.
So.
Wie man hier bereits vermutet, verwende ich die drei Klassen GraphicsEnvironment, GraphicsDevice und DisplayMode, um in den Fullscreenmode zu kommen.
Ich möchte mir nun alle möglichen Auflösungen meiner Grafikkarte anzeigen lassen und mir dann diejenigen, die ich verwenden möchte rauspicken.
Die Methode getDefaultScreenDevice() liefert ja nur die aktuelle Auflösung des Desktops und mit getScreenDevices() komme ich irgendwie nicht zurecht. Letzteres ist ja ein eindimensionales Array von dem ich dachte einfach durchiterieren zu können, aber das funktionierte nicht.
Wie verwendet man die Methode getScreenDevices() richtig?
Außerdem entstehen beim Switchen der Auflösung beispielsweise auf 800x600 unschöne Balken an der linken bzw. rechten Seite, wie verhindert man das?
Hier mal das was ich testeshalber habe als Code:
Java:
package main;
import java.awt.DisplayMode;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Main extends JPanel{
private static final long serialVersionUID = 1L;
private JFrame frame = new JFrame();
private JButton button = new JButton("Switch");
private JComboBox<String> res = new JComboBox<>();
private GraphicsEnvironment ge;
private GraphicsDevice gd;
private DisplayMode mode;
public Main() {
ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
gd = ge.getDefaultScreenDevice();
res.setBounds(100,100,100,20);
frame.setUndecorated(true);
gd.setFullScreenWindow(frame);
setLayout(null);
button.setBounds(frame.getWidth()/16,frame.getHeight()/2+75,300,50);
button.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent a) {
res.addItem("1600x900");
res.addItem("800x600");
res.setMaximumRowCount(2);
add(res);
res.addItemListener(new ItemListener(){
@Override
public void itemStateChanged(ItemEvent i) {
if(i.getItem().equals("1600x900")){
mode = new DisplayMode(1600,900,32,DisplayMode.REFRESH_RATE_UNKNOWN);
gd.setDisplayMode(mode);
gd.setFullScreenWindow(frame);
}
if(i.getItem().equals("800x600")){
mode = new DisplayMode(800,600,32,DisplayMode.REFRESH_RATE_UNKNOWN);
gd.setDisplayMode(mode);
gd.setFullScreenWindow(frame);
}
}
});
}
});
add(button);
frame.getContentPane().add(this);
frame.setVisible(true);
}
Also wenn ich mich zu unspezifisch mit meinen Fragen ausgedrückt habe bitte ich um Verzeihung.
Gruß Eichelhäer
public static void main(String[] args) {
new Main();
}
}