Swing Component Resize

Bitte aktiviere JavaScript!
hallo, ich möchte in einer Gui für ein Projekt mit Objekten, wenn diese gemalt werden, diese an die größe beim verkleiner. Usw des bildschirms anpassen. Ansatz wäre getwidth usw, problem ist aber, dass wenn ich den im konstruktor adde getwidth / height = 0 ist. Gibt es da eine bessere lösung?

Danke für eure Hilfe im Voraus ^^
 
A

Anzeige




Schau mal hier —> (hier klicken)
Im Konstruktor?!? Wovon? Gemalt wird in paintComponent.
 
Also nochmal ausführlich:

Ich programmiere gerade die GUI für ein kleines Minispiel. Objekte habe ich in einem Array gespeichert und zeichnen sich selbst auf ein Graphics Objekt. Diese Objekte haben den Anfang- und den Endpunkt, den Sie später auf dem Bildschirm haben werden, eingespeichert. Diese Objekte haben dann eine resize Funktion mit einem x-Faktor und einem y-Faktor Parameter, also um welchen Faktor der Bildschirm vergrößert wird.

Das Problem ist, wenn ich jetzt das Fenster vergrößere, verändern die Objekte ihre Position und Größe ja nicht. Deshalb möchte ich einen Resize Listener hinzufügen. Jedoch wenn ich dies im Konstruktor mache, bekomme ich die Werte getWidth() = 0 und getHeight() = 0 heraus. Problem ist, dass ich so keine vorherige Größe, um den Veränderungsfaktor zu errechnen habe.
 
Jo, ich bin das Problem umgangen und skaliere das Spielfeld in der Paintmethode jetzt mit Graphics 2D und scale neu^^
 
Ich habe noch ein Problem: Unzwar möchte ich eine überschrift Links einem bild, dann in der mitte Text uns rechts noch ein Bild haben. Das ganze soll vergrößerbar sein, alao wenn das JFrame vergrößert wird.
Problem ist, dass ich die breite von dem String zwar errechnen kann, aber nur in der paint methode mit font metrix und dann in der getPrefSize die größe von dem vorherigem repaint herauskommt.
Danke für eure Hilfe ^^
 
Ich verstehe nicht, was Du machen willst bzw. wo das Problem liegt.

Du hast ein Layout, das drei Komponenten in einer "Zeile" anordnet (die zur Verfügung stehende Breite wird auf die drei Komponenten aufgeteilt). Vergrößerst Du das Fenster, werden die Komponenten entsprechend des Layouts ebenfalls vergrößert, d. h. der zur Verfügung stehende Platz ändert sich für jede Komponente.

In den zur Verfügung stehenden Platz passt Du (spätestens) beim Zeichnen einfach die Inhalte ein.
 
Hab mal was zusammengeschustert, ohne die Höhe zu berücksichtigen:

Java:
import java.awt.*;
import java.awt.geom.Rectangle2D;
import javax.swing.*;

public class Test {
    private JLabel label = new JLabel("Test") {
        @Override
        public void paintComponent(Graphics g) {
            ((Graphics2D) g).setRenderingHint(
                 RenderingHints.KEY_FRACTIONALMETRICS,
                 RenderingHints.VALUE_FRACTIONALMETRICS_ON);

            Insets insets = getInsets();
            int mw = getWidth() - insets.left - insets.right;
            double fontSize = calculateFontSize(g, mw);
            Font font = getFont().deriveFont((float) fontSize);
            g.setFont(font);
            FontMetrics fm = g.getFontMetrics(font);
            g.drawString(getText(), insets.left, insets.top + fm.getAscent());
        }

        private double calculateFontSize(Graphics g, int mw) {
            Font font = getFont();
            FontMetrics fm = g.getFontMetrics(font);
            Rectangle2D bounds = fm.getStringBounds(getText(), g);
            return font.getSize2D() * mw / bounds.getWidth();
        }
    };

    public void run() {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.add(label);
        frame.setVisible(true);
        frame.setSize(800, 600);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new Test().run());
    }
}
 
A

Anzeige




Vielleicht hilft dir das hier weiter: (klicke hier)
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben