Buttongröße Layout

Status
Nicht offen für weitere Antworten.

MQue

Top Contributor
Hallo,

hab ein kleines Programm (lauffähiges) geschrieben, welches einen Button an die Größe der Parent- Componente JPanel anpasst,
Mein Problem ist jetzt, dass ich mehrere Buttons auf dem Panel plazieren will und wenn ich das Panel in der Größe ändere, dann sollen sich die Button auch in Relation ändern,

Hat jemand einen Idee wie ich das vernünftig lösen könnte?

Vielen Dank für Antworten,
lg
Michl


Code:
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.LayoutManager;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class Main {

    public Main() {
        final JFrame frame= new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = new JPanel();
        panel.setPreferredSize(new Dimension(500, 500));
        panel.setBackground(Color.RED);

        JButton button = new JButton("hallo1");
        button.setPreferredSize(new Dimension(130, 50));
        button.setLocation(140, 70);
        panel.add(button);

        JButton button1 = new JButton("hallo2");
        button1.setPreferredSize(new Dimension(100, 30));
        button1.setLocation(10, 20);
        panel.add(button1);

        panel.setLayout(new FlexiblePanel(button1));

        frame.add(panel);
        frame.setBounds(500, 10, 500, 500);
        frame.setVisible(true);
        }
  
    public static void main(String[] args) {
        new Main();
    }

    private class FlexiblePanel implements LayoutManager {

        private final Dimension d;
        private final JButton button;

       public FlexiblePanel(final JButton button) {
           this.button = button;
           d = new Dimension(1440, 900);
          }

        @Override
       public void layoutContainer(Container c) {
            // Problem
            button.setLocation(c.getWidth()/6, c.getHeight()/6);
            button.setSize(c.getWidth()/3, c.getHeight()/3);
            }
        
        @Override
       public void removeLayoutComponent(Component comp) {}
        @Override
       public void addLayoutComponent(String text, Component comp) {}
        @Override
       public Dimension minimumLayoutSize(Container c) {return d;}
        @Override
       public Dimension preferredLayoutSize(Container c) {return d;}
      }

}
 

MQue

Top Contributor
Hast du dir schonmal das GridBagLayout angesehen?

How to Use GridBagLayout


Ja schon, alles bekannt, aber beim Programmstart werden aus einer XML- Datei die Koordinaten der Buttons (absolute Koordinaten) und die Größe des Frames ausgelesen, beim Programmstart solls also mal so aussehen, wies in der XML- Datei steht, Wenn ich dann das JFrame zusammen oder auseinanderziehe, sollen sich die JButtons auch eben in Relation vergrößern oder verkleinern.
Und da ist eben das GridBagLayout nicht das Richtige, da ich nicht weiß welches Raster ich über das JPanel legen soll (z.B.: wenn es sich um 150 JButtons handelt)
 

Michael...

Top Contributor
Du kannst ja aus den absoluten Koordinaten und Größen nach dem Einlesen die Größenverhältnisse berechnen und diese Faktoren in layoutContainer(...) auf die jeweiligen Komponenten anwenden.
 

Wildcard

Top Contributor
Hört sich sehr ungünstig an. Absolute Koordinaten würden nur dann sinn machen wenn du etwas bestimmtes visualisieren möchtest. Wenn du etwas visualisieren willst (Sitzplätze, Boxen,...) sind Buttons aber eine schlechte Wahl, das zeichnet man dann selbst.
Ist das ein Versuch deskriptive GUIs zu bauen? Falls ja sind absolute Koordinaten ungeeignet. Für dieses Problem würde es dann auch funktionierende, bestehende Lösungen geben.
SWIXML - Generate javax.swing at runtime based on XML descriptors
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben