Swing Component Resize

Diskutiere Component Resize im AWT, Swing, JavaFX & SWT Forum; 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...

  1. MrXeth
    MrXeth Mitglied
    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 ^^
     
  2. Vielleicht hilft dir dieses Training hier weiter.
  3. mihe7
    mihe7 Bekanntes Mitglied
    Im Konstruktor?!? Wovon? Gemalt wird in paintComponent.
     
  4. MrXeth
    MrXeth Mitglied
    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.
     
  5. mihe7
    mihe7 Bekanntes Mitglied
    Ein Grund mehr, JFrame nicht zu erweitern...

    Aber, damit ich es richtig verstehe: Du hast einen ResizeListener, in dem Du die Größe des Fensters abfrägst, und das liefert eine Breite und Höhe von 0?
     
  6. MrXeth
    MrXeth Mitglied
    Jo, ich bin das Problem umgangen und skaliere das Spielfeld in der Paintmethode jetzt mit Graphics 2D und scale neu^^
     
  7. MrXeth
    MrXeth Mitglied
    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 ^^
     
  8. mihe7
    mihe7 Bekanntes Mitglied
    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.
     
  9. mihe7
    mihe7 Bekanntes Mitglied
    Hab mal was zusammengeschustert, ohne die Höhe zu berücksichtigen:

    Code (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());
        }
    }
     
     
  10. Wenn du Java lernen möchtest, empfehlen wir dir diese Online-Training hier
Die Seite wird geladen...

Component Resize - Ähnliche Themen

JComponent - ComponentListener - resized / moved
JComponent - ComponentListener - resized / moved im Forum AWT, Swing, JavaFX & SWT
Kein resize nach Component.setVisible()
Kein resize nach Component.setVisible() im Forum AWT, Swing, JavaFX & SWT
One componentResized Event
One componentResized Event im Forum AWT, Swing, JavaFX & SWT
ComponentResized
ComponentResized im Forum AWT, Swing, JavaFX & SWT
ComponentEvent - compoenentMoved, componentResized
ComponentEvent - compoenentMoved, componentResized im Forum AWT, Swing, JavaFX & SWT
Thema: Component Resize