Welcher LayoutManager erfüllt meine Bedingung

SexyPenny90

Mitglied
Hallo,

habe hier ein Programm das so aussieht, wenn ich es öffne

attachment.php


Wenn ich unten rechts mit der Maus die Oberfläche größer mache sieht es nun so aus:

attachment.php


Wollte nun fragen, welchen LayoutManager ich nehmen muss, dass sie sie Komponenten (Textfeld, button...) sich der Fenstergröße anpassen. Bis jetzt arbeite ich offensichtlich mit layoutManager null.


Wie müsste ich meine GUI bei folgendem zusammengefassem code ändern?

Java:
public class Gui extends Frame
{
  private Button btnStart, btnStop;
  private TextField txtPlus, txtMinus;
  private Container c;
  private MyListener myL = new MyListener(this);
  public Gui()
  {
    super ("Zähler");
    this.setBounds(100,100,360,200);
    this.setLayout(null);
    this.setBackground(Color.MAGENTA);
    txtPlus = new TextField();
    txtPlus.setBounds(100,70,60,23);
    this.add(txtPlus);
    txtMinus = new TextField();
    txtMinus.setBounds(180,70,60,23);
    this.add(txtMinus);
    btnStart = new Button("Start");
    btnStart.setBounds(87,40,75,23);
    this.add(btnStart);
    btnStart.addActionListener(myL);
    btnStop = new Button("Ende");
    btnStop.setBounds(87,100,75,23);
    this.add(btnStop);
    btnStop.addActionListener(myL);
      
    
    this.addWindowListener(myL);
    this.setVisible(true);
    
  }


Hoffe ihr könnt mir helfen

Penny
 
Zuletzt bearbeitet von einem Moderator:
Wollte nun fragen, welchen LayoutManager ich nehmen muss, dass sie sie Komponenten (Textfeld, button...) sich der Fenstergröße anpassen. Bis jetzt arbeite ich offensichtlich mit layoutManager null.
Jeden anderen außer das null layout 😉

How to Use Various Layout Managers (The Java™ Tutorials > Creating a GUI With JFC/Swing > Laying Out Components Within a Container)
Mit dem GridBagLayout ließe sich das ganz gut realisieren, das ist allerdings nicht so trivial zu verstehen.
 
Auch mal sich FormLayout von JGoodies anschauen. Ich nehme immer Abeille zur WYSIWIG Konstruktion.

Kann jemand das JGoodies näher erklären? Hab es mir bereits mal runter geladen und auch durchgelesen, aber die Main wurde bei mir nicht gefunden, daraufhin hab ich es gelassen. Die ReadMe hat mich auf eine FileNotFound Page geleitet.

Es handelt sich dabei ja um eine Art GuiBuilder? Ähnlich wie der von VB? (drag and drop). Evtl. hat jem. eine kleine Anleitung.
 
Ein Beispiel mit GridBagLayout könnte so aussehen:
Java:
import java.awt.*;
import javax.swing.*;

public class Gui
{
  private JButton btnStartPlus, btnStartMinus, btnEndPlus, btnEndMinus, btnEnd;
  private JTextField txtPlus, txtMinus;
  
  public Gui(String title)
  {
    JFrame frame = new JFrame(title);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    JPanel contentPanel = new JPanel(new GridBagLayout());
    contentPanel.setPreferredSize(new Dimension(400, 200));
    contentPanel.setBackground(Color.MAGENTA);
    contentPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
    
    GridBagConstraints gbc = new GridBagConstraints();
    
    //Komponenten erzeugen
    btnStartPlus = new JButton("Start+");
    btnStartMinus = new JButton("Start-");
    btnEndPlus = new JButton("Ende+");
    btnEndMinus = new JButton("Ende-");
    btnEnd = new JButton("Programmende");
    
    txtPlus = new JTextField();
    txtMinus = new JTextField();
    
    //Komponenten einstellen und hinzufügen
    gbc.fill = GridBagConstraints.BOTH;
    gbc.weightx = 1.0;
    gbc.weighty = 1.0;
    gbc.insets = new Insets(5, 5, 5, 5);
    contentPanel.add(btnStartPlus, gbc);
    
    gbc.gridx = 1;
    contentPanel.add(btnStartMinus, gbc);
    
    gbc.gridx = 0;
    gbc.gridy = 1;
    contentPanel.add(txtPlus, gbc);    

    gbc.gridx = 1;
    contentPanel.add(txtMinus, gbc);    
    
    gbc.gridx = 0;
    gbc.gridy = 2;
    contentPanel.add(btnEndPlus, gbc);
    
    gbc.gridx = 1;    
    contentPanel.add(btnEndMinus, gbc);
    
    gbc.gridx = 0;
    gbc.gridy = 3;
    gbc.gridwidth = 2;
    contentPanel.add(btnEnd, gbc);
    
    frame.add(contentPanel);
      
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
    
  }
  
  public static void main(String[] args) {
    try {
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    }
    catch(Exception e) {
      e.printStackTrace();
    }
    
    SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        new Gui("Zähler");
      }
    });
  }
Die hier programmierte Variante ist nur eine von mehreren Möglichkeiten, die mit GridBagLayout erzeugt werden kann.
Es kommt ganz darauf an, wie genau es aussehen soll. Das GridBagLayout ist ein äußerst mächtiger und flexibler LayoutManager, wird aber von Einsteigern meist als kompliziert eingestuft.
 
Dann komm ich gleich mal mit dem Gegenbeispiel GroupLayout 😀
Java:
JPanel panel = new JPanel();
        
        JButton btnStart = new JButton("Start+");   
        textFieldLeft = new JTextField(10); 
        textFieldRight = new JTextField(10);
        JButton btnEnde_1 = new JButton("Ende-");   
        JButton btnEnde = new JButton("Ende+");     
        JButton btnProgrammende = new JButton("Programmende");
        JButton btnStart_1 = new JButton("Start-");
 
        GroupLayout gl_panel = new GroupLayout(panel);
        gl_panel.setAutoCreateGaps(true);
        gl_panel.setAutoCreateContainerGaps(true);
        gl_panel.setHorizontalGroup(
        		gl_panel.createSequentialGroup()
        			.addGap(0,0,Short.MAX_VALUE)
        			.addGroup(gl_panel.createParallelGroup(Alignment.CENTER)
        					.addGroup(gl_panel.createSequentialGroup()
        					.addGroup(gl_panel.createParallelGroup(Alignment.TRAILING)
                                .addComponent(btnStart)
                                .addComponent(textFieldLeft,GroupLayout.PREFERRED_SIZE,GroupLayout.PREFERRED_SIZE,GroupLayout.PREFERRED_SIZE)
                                .addComponent(btnEnde))
                            .addGroup(gl_panel.createParallelGroup(Alignment.LEADING)
                                .addComponent(btnStart_1)
                                .addComponent(textFieldRight,GroupLayout.PREFERRED_SIZE,GroupLayout.PREFERRED_SIZE,GroupLayout.PREFERRED_SIZE)
                                .addComponent(btnEnde_1)))
                            .addComponent(btnProgrammende)
                            )
                    .addGap(0,0,Short.MAX_VALUE)
                );
        
        gl_panel.setVerticalGroup(
            gl_panel.createParallelGroup(Alignment.LEADING)
                .addGroup(gl_panel.createSequentialGroup()
                    .addGroup(gl_panel.createParallelGroup(Alignment.LEADING)
                        .addComponent(btnStart)
                        .addComponent(btnStart_1))
                    .addGroup(gl_panel.createParallelGroup(Alignment.LEADING)
                        .addComponent(textFieldLeft,GroupLayout.PREFERRED_SIZE,GroupLayout.PREFERRED_SIZE,GroupLayout.PREFERRED_SIZE)
                        .addComponent(textFieldRight,GroupLayout.PREFERRED_SIZE,GroupLayout.PREFERRED_SIZE,GroupLayout.PREFERRED_SIZE))
                    .addGroup(gl_panel.createParallelGroup(Alignment.LEADING)
                        .addComponent(btnEnde)
                        .addComponent(btnEnde_1))
                    .addComponent(btnProgrammende))
        );
        
        panel.setLayout(gl_panel);
 
Zuletzt bearbeitet:

Zurück
Oben