Gui resize / skalieren

Nob

Mitglied
Hallo zusammen

Ich habe ein Fenster welches 100x100 Pixel gross ist. Jetzt habe ich darin 10 Labels mit einer Höhe von 10 Pixel je Label. Somit ist das ganze Fenster genau gefüllt. Jetzt möchte ich dem User die Möglichkeit bieten, das Fenster zu vergrössern.

Wenn man das Fenster auf nun auf 200x200 Pixel zieht, dann sollten die Labels (also der Text) doppelt so gross erscheinen, so dass wiederum das ganze Fenster ausgefüllt ist. Das ganze sollte aber auch mit Bildern funktionieren.

Ich suche also nach einer Möglichkeit, das ganze Fenster zu "zoomen".

Bin für jede Idee dankbar :)
 
Hallo Nob,

Ich würde immer die Fenstergröße setzen, dann geht alles automatisch und ohne Sachen wie extra Listener, Methoden überschreiben, Berechnungen, ect.

Ich hab mal nen kleinen Beispielcode geschrieben (pack macht Frame anfangs genau groß genug)

Code:
package tutorials;

import java.awt.GridLayout;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class BildZoomFenster extends JFrame{

    ImageIcon[] bilder = new ImageIcon[10];

    public BildZoomFenster(){
        super("BildZoomFenster");
        setLayout(new GridLayout(5, 2)); // Zusers zahl von "zellen" in y-Richtung, dann in x-Richtung
        // Erzeugen der Bilder
        bilder[0] = new ImageIcon(getClass().getResource("/tutorials/images/ball.gif")); // Hohlt imige mithilfe von URL
        add(new JLabel(bilder[0]));
        bilder[1] = new ImageIcon(getClass().getResource("/tutorials/images/coffe.png"));
        add(new JLabel(bilder[1]));
        bilder[2] = new ImageIcon(getClass().getResource("/tutorials/images/facebook.png"));
        add(new JLabel(bilder[2]));
        bilder[3] = new ImageIcon(getClass().getResource("/tutorials/images/flower.png"));
        add(new JLabel(bilder[3]));
        bilder[4] = new ImageIcon(getClass().getResource("/tutorials/images/icon.gif"));
        add(new JLabel(bilder[4]));
        bilder[5] = new ImageIcon(getClass().getResource("/tutorials/images/java.png"));
        add(new JLabel(bilder[5]));
        bilder[6] = new ImageIcon(getClass().getResource("/tutorials/images/pc.png"));
        add(new JLabel(bilder[6]));
        bilder[7] = new ImageIcon(getClass().getResource("/tutorials/images/us_flag.gif"));
        add(new JLabel(bilder[7]));
        bilder[8] = new ImageIcon(getClass().getResource("/tutorials/images/windows.jpg"));
        add(new JLabel(bilder[8]));
        bilder[9] = new ImageIcon(getClass().getResource("/tutorials/images/youtube.png"));
        add(new JLabel(bilder[9]));
        //setSize(200, 200);
        pack();
    }

    public static void main(String[] args) {
        BildZoomFenster bzf = new BildZoomFenster();
        bzf.setVisible(true);
    }

}

Bei den Labels würde gehts natürlich nicht ohne ComponentListener, sofern du die Schriftgröße je nach fenstergröße anpassen willst

Hier das beispiel dafür:
Code:
package tutorials;

import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class ZoomFenster extends JFrame implements ComponentListener{

    JLabel[] label = new JLabel[10];

    public ZoomFenster(){
        super("ZoomFenster");
        addComponentListener(this);
        setLayout(new GridLayout(5, 2)); // Zusers zahl von "zellen" in y-Richtung, dann in x-Richtung
        for(int i=0; i<10; ++i){
            label[i] = new JLabel("Label"+i);
            add(label[i]); // Jewails nummewriertes label wird hinzugefügt
        }
        setSize(200, 200);
    }

    public static void main(String[] args) {
        ZoomFenster zf = new ZoomFenster();
        zf.setVisible(true);
    }

    // Wird automatisch aufgerufen wenn die bounded propery Fenstergröße geändert wird
    public void componentResized(ComponentEvent e) {
        int schriftgroesse = getSize().height / 9;
        for(int i=0; i<label.length; ++i){
            label[i].setFont(new Font("Arial", 1, schriftgroesse)); // 1 bedeuted nicht fetter/nicht kursiver Text
        }
    }

    public void componentMoved(ComponentEvent e) {
    }

    public void componentShown(ComponentEvent e) {
    }

    public void componentHidden(ComponentEvent e) {
    }

}

Damit du auch die Bilder hast und meine beispiele gleich anschauen kannst, hab ich mal die beiden klassen jewails in jars verpackt angehängt.

javaDeveloper2011
 

Anhänge

  • PictureZoomWindow.jar
    18,1 KB · Aufrufe: 66
  • TutorialsZoomWindow.jar
    2,6 KB · Aufrufe: 53
  • Gefällt mir
Reaktionen: Nob
Hallo javaDeveloper2011

WOW!! Vielen DANK für das SUPER BEISPIEL!
Das mit dem Text funktioniert super, genau was ich gesucht habe. Das mit den Bildern leider nicht, aber ich versuche auch mal so ein Listener hinzuzufügen.

Nochmals DANKE!
 
Zurück