JFrame Bild strecken und auf Bildschirmgröße anpassen

Infictible

Neues Mitglied
Hallo,

Ich bin noch sehr unerfahren im Java programmieren und habe deshalb folgendes Problem.
Also ich will mit einem Freund ein Spiel programmieren und arbeite im moment am Hauptmenü.
Mein Problem:

Das Bild ist in 1920x1080 Pixel gezeichnet, aber mein Bildschirm ist auf 1680x945 Pixel eingestellt.
Und das ganze Bild wird nun nicht vollständig auf meinem Bildschirm angezeigt.
Nun ist meine Frage, wie ich programmieren kann, das sich das Bild an die Bildschirmgröße anpasst und nichts weggeschnitten wird.

Mein Code:

Code:
import javax.swing.*;
import java.io.*;
import javax.imageio.*;
import java.awt.*;

public class Hauptmenü {

    public static void main(String[] args) {
       
       
        JFrame Hauptmenü = new JFrame("Drag and Play");
       
        try {
           
            Hauptmenü.setContentPane(new JLabel(new ImageIcon(ImageIO.read(new File("C:/Java/Drag and Play/Sources/Hauptmenü.jpg")))));
           
        }catch(IOException e)
        {
            System.out.println("Image not found");
        }
       
        Dimension screensize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
       
       
        System.out.println(screensize);
        Hauptmenü.setResizable(false);
        Hauptmenü.setSize(screensize);
        Hauptmenü.setVisible(true);
    }

}
 
Ihr redet von 'anpassen'. Das ist aber auch die Aufgabe des Programmierers zu definieren, was 'anpassen' heißt.

Hier eine Methode zum Skalieren von Bildern:
Code:
public class ImageIconSkalierenClass {
    public static void main(String[] args){
        ImageIcon ico = new ImageIcon("/home/webs/bild.jpg");
        ico.setImage(ico.getImage().getScaledInstance(100,100,Image.SCALE_DEFAULT));
    }
}
Wie das genau geht und funktioniert könnt ihr hier nochmal nachlesen.

Überlegt selbst mal, wie man das mit dem 'anpassen' macht.
Tipp: Wenn ihr das Image an die Bildschrimauflösung des Endusers anpassen wollt, dann
lasst die Referenz zum Standartbild ausrechnen und benutzt diese als Multiplikator bei der Skalierung.
Das jetzt in Java zu realisieren ist eure Aufgabe 🙂 Viel Spaß!

Natürlich könntet ihr auch für alle Bildschirmgrößen der Welt ein anderes Bild benutzen. Z.B. wenn screensize==1920x1080 dann Bild 1
und wenn screensize == 1918x1076 dann Bild 2, usw...
Da wärt ihr aber lange beschäftigt ist aber auch ne Möglichkeit.
Ihr müsst dann natürlich für die einzelnen Bilder das Bild manuell im Vorraus skalieren.
 
die Methode von Moritz_1234 könnt ihr auf jeden fall benutzen, und um an die Bildschirmgröße bzw. weite zu kommen könnt ihr panel.getWidth und panel.getHeight bzw. statt panel euren JFrame benutzen. 🙂
 

Neue Themen


Zurück
Oben