Button vergrößert sich bei Fenster resize

javastudent25

Bekanntes Mitglied
Hallo zusammen

Ich habe hier mal bei der GUI angefangen etwas zu machen.
Könnte mir jemand sagen, warum mir der Button auf einmal die Grösse des Fensters annimmt, sobald ich es grösser ziehe?
Aufgrund von setBounds(....) sollte es doch auf Position bleiben..

Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class bingo2 extends JFrame{
   
    JFrame fenster;
    JButton button;
   
    bingo2(){
   
    fenster = new JFrame();                  //Als Parameter kann der Text im Titel übergeben werden
    fenster.setSize(300, 500);
    fenster.setLocationRelativeTo(null);    //zentriert das Fenster mittig
    //fenster.setLocation(500.500);         // oder damit kann die Fensterpostion auch 1gesetzt werden
    fenster.setVisible(true);
    fenster.setResizable(true);
    fenster.setTitle("Bingo Button klicken!");
    setLayout(null);
    fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   
    button = new JButton("Ich heisse Bingo!");
    button.setBounds(10, 10, 150, 25);
    derButtonListener bl = new derButtonListener();
    button.addActionListener(bl);               //oder auch "new derButtonListener" direkt als Parameter
    fenster.add(button);
   

    }
   
    public static void main(String[] args) {
       
        bingo2 bingo = new bingo2();
       
    }
   
    public class derButtonListener implements ActionListener{
       

    public void actionPerformed(ActionEvent e) {
       
        System.out.println("Bingo, ist mein Name!");
       
    }
   
   
    }
}
 
Bin gerade dran, aber vllt. könntest du mir ja schnell meine Frage bzgl. des Containers beantworten.
Das blick ich irgendwie nämlich nicht..
da fängts nämlich an 😉
 
ok, ich habe jetzt versucht 2 Buttons in der Fläche mittels FlowLayout anzuzeigen. Und damit habe ich also auch mit LayoutManagern gearbeitet. Das Phänomen scheint das Gleiche zu sein.
Ich sehe die Buttons nämlich erst, wenn ich das Fenster aufziehe..

Java:
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class ZweiButtons {

    JFrame fenster;
    JButton button1;
    JButton button2;

    ZweiButtons() {

        fenster = new JFrame(); // Als Parameter kann der Text im Titel
                                // übergeben werden
        FlowLayout flowLayout = new FlowLayout();
        Container container = fenster.getContentPane();
        container.setLayout(flowLayout);

        fenster.setSize(500, 700);
        fenster.setLocationRelativeTo(null); // zentriert das Fenster mittig
        // fenster.setLocation(500.500); // oder damit kann die Fensterpostion
        // auch 1gesetzt werden
        fenster.setVisible(true);
        fenster.setResizable(true);
        fenster.setTitle("Bingo Button klicken!");

        fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        button1 = new JButton("Ich heisse Bingo1...");
        button1.setSize(100, 15);
        button2 = new JButton("... und ich heisse Bingo2");
        button2.setSize(100, 15);
        derButtonListener bl = new derButtonListener();
        button1.addActionListener(bl); // oder auch "new derButtonListener"
                                        // direkt als Parameter
        button2.addActionListener(bl);
        container.add(button1);
        container.add(button2);

    }

    public static void main(String[] args) {

        ZweiButtons buttons = new ZweiButtons();

    }

    public class derButtonListener implements ActionListener {

        public void actionPerformed(ActionEvent e) {

            if (e.getSource() == button1) {

                System.out.println("Ich bin Bingo1!");

            } else {
                if (e.getSource() == button2) {
                    System.out.println("Ich bin Bingo2!");
                }
            }

        }
    }

}
 
ich habe mal etwas Neues probiert und weiss nicht, warum meine Texte oben, unten nicht zentriert sind und warum mittig linksbündig steht??

Java:
import java.awt.BorderLayout;
import java.awt.Container;

import javax.swing.JFrame;
import javax.swing.JLabel;

public class BorderLayouttext extends JFrame{
   
    JLabel textLinks, textRechts, textMittig, textOben, textUnten;
   
    BorderLayouttext(){
       
        textLinks = new JLabel("textLinks");
        textRechts = new JLabel("textRechts");
        textMittig = new JLabel("textMittig");
        textOben = new JLabel("textOben");
        textUnten = new JLabel("textUnten");
       
        JFrame fenster = new JFrame();
        Container container = fenster.getContentPane();
        container.setLayout(new BorderLayout());
        container.add(textLinks, BorderLayout.WEST);
        container.add(textRechts, BorderLayout.EAST);
        container.add(textMittig, BorderLayout.CENTER);
        container.add(textOben, BorderLayout.NORTH);
        container.add(textUnten, BorderLayout.SOUTH);
        fenster.setVisible(true);
        fenster.setSize(500, 700);
       
       
    }

    public static void main(String[] args) {

        BorderLayouttext texts = new BorderLayouttext();

    }
   
   

}
 
Naja, da muss ich wohl durch. Ich muss nächste Woche eben eine Prüfung schreiben.

Also mit repaint ist nochmals das Fenster neu visible machen gemeint..
gut, aber der obige Aufbau (Beitrag #11) ist total durcheinander trotz BorderLayout

mit den Buttons funktionierts aber?

Java:
import java.awt.BorderLayout;
import java.awt.Container;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Borderlayoutbutton {
JButton buttonLinks, buttonRechts, buttonMittig, buttonOben, buttonUnten;
  
    Borderlayoutbutton(){      
        buttonLinks = new JButton("buttonLinks");
        buttonRechts = new JButton("buttonRechts");
        buttonMittig = new JButton("buttonMittig");
        buttonOben = new JButton("buttonOben");
        buttonUnten = new JButton("buttonUnten");
      
        JFrame fenster = new JFrame();
        Container container = fenster.getContentPane();
        container.setLayout(new BorderLayout());
        container.add(buttonLinks, BorderLayout.WEST);
        container.add(buttonRechts, BorderLayout.EAST);
        container.add(buttonMittig, BorderLayout.CENTER);
        container.add(buttonOben, BorderLayout.NORTH);
        container.add(buttonUnten, BorderLayout.SOUTH);
        fenster.setSize(500, 700);
        fenster.setVisible(true);    
    }

    public static void main(String[] args) {
        Borderlayoutbutton texts = new Borderlayoutbutton();
    }
}
 
Zuletzt bearbeitet von einem Moderator:
Dann müsste dies aber funktionieren, weil das FlowLayout() zentriert doch die JObjekte

damit müssten die Label wohl am definierten Platz sein, aber irgendwie haben die keine Lust heute
Ich seh nämlich textlinks und textrechts nur noch.. die anderen sind wohl schlafen gegangen 😀

Java:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class BorderLayouttext extends JFrame{ 
    JLabel textLinks, textRechts, textMittig, textOben, textUnten;
 
    BorderLayouttext(){     
        textLinks = new JLabel("textLinks");
        textRechts = new JLabel("textRechts");
        textMittig = new JLabel("textMittig");
        textOben = new JLabel("textOben");
        textUnten = new JLabel("textUnten");
     
        JFrame fenster = new JFrame();
        Container container = fenster.getContentPane();
        container.setLayout(new BorderLayout());
        JPanel panelNorth = new JPanel();
        panelNorth.setLayout(new FlowLayout());
        JPanel panelSouth = new JPanel();
        panelSouth.setLayout(new FlowLayout());
        JPanel panelCenter = new JPanel();
        panelCenter.setLayout(new FlowLayout());
        container.add(textLinks, "West");   //entweder mit "" Position West angeben
        container.add(textRechts, "East");
        container.add(panelCenter, "Center");  // oder mit BorderLayout.CENTER ohne "" - CENTER aber gross
        container.add(panelNorth, BorderLayout.NORTH);
        container.add(panelSouth, BorderLayout.SOUTH);
        fenster.setSize(500, 700);
        fenster.setVisible(true);
        fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     
    }

    public static void main(String[] args) {
        BorderLayouttext texts = new BorderLayouttext();
    }
}
 
Zuletzt bearbeitet von einem Moderator:
Das schaut gut aus, aber ich verstehe nicht ganz was ich jetzt damit wirklich anfangen soll.
Das ist ja ein Konstruktor
public JLabel(String text, int horizontalAlignment)
Sorry für die dumme Frage
 
Ich weiss echt nicht was du meinst.
Ich kann ja nicht, wo new FlowLayout() steht, einfach JLabel(String text..., int Center) schreiben
erstens passt irgendwie der Ort nicht wo ich es reinquetsche und andererseits stört mich das int..
Ich hab damit einfach zu wenig Erfahrung wie das geht
 
Ich habe es fast zusammen, ich hatte vergessen, die JLabels zu den Panels hinzuzufügen..
Aber das panelCenter will einfach nicht gecentert werden...
sonst ist alles brav an seinem Platz.

Java:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class BorderLayouttext extends JFrame{
   
    JLabel textLinks, textRechts, textMittig, textOben, textUnten;
   
    BorderLayouttext(){
       
        textLinks = new JLabel("textLinks");
        textRechts = new JLabel("textRechts");
        textMittig = new JLabel("textMittig");
        textOben = new JLabel("textOben");
        textUnten = new JLabel("textUnten");
       
        JFrame fenster = new JFrame();
        Container container = fenster.getContentPane();
        container.setLayout(new BorderLayout());
        JPanel panelNorth = new JPanel();
        panelNorth.add(textOben);
        panelNorth.setLayout(new FlowLayout());
        JPanel panelSouth = new JPanel();
        panelSouth.add(textUnten);
        panelSouth.setLayout(new FlowLayout());
        JPanel panelCenter = new JPanel();
        panelCenter.setLayout(new FlowLayout());
        panelCenter.add(textMittig);
        container.add(textLinks, "West");   //entweder mit "" Position West angeben
        container.add(textRechts, "East");  
        container.add(panelCenter, "Center");  // oder mit BorderLayout.CENTER ohne "" - CENTER aber gross
        container.add(panelNorth, BorderLayout.NORTH);
        container.add(panelSouth, BorderLayout.SOUTH);
        fenster.setSize(500, 700);
        fenster.setVisible(true);
        fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       
       
       
       
    }

    public static void main(String[] args) {

        BorderLayouttext texts = new BorderLayouttext();

    }
   
   

}
 
Java:
import javax.swing.*;
import java.awt.*;

/**
* Created by Jan on 23.01.2016.
*/
public class BorderLayouttext extends JFrame {

    JLabel textLinks, textRechts, textMittig, textOben, textUnten;

    BorderLayouttext(){

        textLinks = new JLabel("textLinks");
        textRechts = new JLabel("textRechts");
        textMittig = new JLabel("textMittig", SwingConstants.CENTER);
        textOben = new JLabel("textOben", SwingConstants.CENTER);
        textUnten = new JLabel("textUnten", SwingConstants.CENTER);

        JFrame fenster = new JFrame();
        Container container = fenster.getContentPane();
        container.setLayout(new BorderLayout());
        container.add(textLinks, BorderLayout.WEST);
        container.add(textRechts, BorderLayout.EAST);
        container.add(textMittig, BorderLayout.CENTER);
        container.add(textOben, BorderLayout.NORTH);
        container.add(textUnten, BorderLayout.SOUTH);
        fenster.setVisible(true);
        fenster.setSize(500, 700);


    }

    public static void main(String[] args) {

        BorderLayouttext texts = new BorderLayouttext();

    }
}
 
Hallo thecain
Vielen Dank für deine Hilfe.

Eine grundsätzliche Frage gibt es noch. Deine Variante ist kürzer und auch schöner, aber wo ist bei mir der Denkfehler, warum der Text nicht in die Mitte rutscht.
Es hapert bei den Zeilen wo ich beim funktionierenden Code 3 mal // hinzugefügt habe

Meine Überlegung ist die:
  • Ich erzeuge ein panelCenter
  • Ich gebe diesem ein FlowLayout (daher Texte, Buttons etc. werden ja immer zentriert, egal wieviele darin enthalten sind)
  • und den panelCenter füge ich dann dem BorderLayout.CENTER zu (daher müsste der Text dann genau in der Mitte vom Fenster sein und nicht linksbündig im CENTER oder zentriert oben
Das verstehe ich nicht..

Hier die Codes:
dieser funktioniert:
Java:
textLinks = new JLabel("textLinks");
        textRechts = new JLabel("textRechts");
        textMittig = new JLabel("textMittig",SwingConstants.CENTER);
        textOben = new JLabel("textOben");
        textUnten = new JLabel("textUnten");
      
        JFrame fenster = new JFrame();
        Container container = fenster.getContentPane();
        container.setLayout(new BorderLayout());
        JPanel panelNorth = new JPanel();
        panelNorth.add(textOben);
        panelNorth.setLayout(new FlowLayout());
        JPanel panelSouth = new JPanel();
        panelSouth.add(textUnten);
        panelSouth.setLayout(new FlowLayout());
        //JPanel panelCenter = new JPanel();
        //panelCenter.setLayout(new FlowLayout());
        //panelCenter.add(textMittig);
        container.add(textLinks, "West");   //entweder mit "" Position West angeben
        container.add(textRechts, "East"); 
        container.add(textMittig, "Center");  // oder mit BorderLayout.CENTER ohne "" - CENTER aber gross
        container.add(panelNorth, BorderLayout.NORTH);
        container.add(panelSouth, BorderLayout.SOUTH);
        fenster.setSize(500, 700);
        fenster.setVisible(true);
        fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

dieser funktioniert nicht:

Java:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;

public class BorderLayouttext extends JFrame{
  
    JLabel textLinks, textRechts, textMittig, textOben, textUnten;
  
    BorderLayouttext(){
      
        textLinks = new JLabel("textLinks");
        textRechts = new JLabel("textRechts");
        textMittig = new JLabel("textMittig",SwingConstants.CENTER);
        textOben = new JLabel("textOben");
        textUnten = new JLabel("textUnten");
      
        JFrame fenster = new JFrame();
        Container container = fenster.getContentPane();
        container.setLayout(new BorderLayout());
        JPanel panelNorth = new JPanel();
        panelNorth.add(textOben);
        panelNorth.setLayout(new FlowLayout());
        JPanel panelSouth = new JPanel();
        panelSouth.add(textUnten);
        panelSouth.setLayout(new FlowLayout());
        JPanel panelCenter = new JPanel();
        panelCenter.setLayout(new FlowLayout());
        panelCenter.add(textMittig);
        container.add(textLinks, "West");   //entweder mit "" Position West angeben
        container.add(textRechts, "East"); 
        container.add(panelCenter, "Center");  // oder mit BorderLayout.CENTER ohne "" - CENTER aber gross
        container.add(panelNorth, BorderLayout.NORTH);
        container.add(panelSouth, BorderLayout.SOUTH);
        fenster.setSize(500, 700);
        fenster.setVisible(true);
        fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      
      
      
      
    }

    public static void main(String[] args) {

        BorderLayouttext texts = new BorderLayouttext();

    }
  
  

}
 

Neue Themen


Zurück
Oben