Swing Button hat falsche Größe

Diskutiere Swing Button hat falsche Größe im Java Basics - Anfänger-Themen Forum; Guten Tag, hoffe ich bin hier im richtigen Unterforum. Ich versuche grade wieder in java reinzukommen (habe damals auch nur Konsolen-Java...

  1. Hans Gerber
    Hans Gerber Neues Mitglied
    Guten Tag,

    hoffe ich bin hier im richtigen Unterforum.

    Ich versuche grade wieder in java reinzukommen (habe damals auch nur Konsolen-Java programmiert) und schaue mir grade Swing an. Ich habe ein Fenster gebaut mit einem Schließen-Button. Ich setzte das Fenster auf 300 x 300 und rufe für den button seperat die methode zum setzen der Größe (allerdings mit anderen Werten) auf. Dennoch ist und bleibt der Button genau so groß wie das Fenster .... Ich finde das problem grade nicht wirklich und wollte daher hier mal fragen.

    Hier mein bisheriger Code:

    Code (Text):


    import java.awt.event.*;
    import javax.swing.*;

    public class SwingTest {
       
       public static void main(String[] args){
           
           new appFrame("Test Fenster");
       }
    }

    class appFrame extends JFrame {
       
       public appFrame(String title) {
           
           super(title);
           
           addWindowListener(new WindowAdapter(){
               
               public void windowClosing (WindowEvent e) {

                   System.exit (0);
               }
           });
           
           add(new appExitButton(20, 20, 100, 40));
           
           setSize(300, 300);
           setVisible(true);
       }
    }

    class appExitButton extends JButton {
       
       public appExitButton(int bX, int bY, int bW, int bH){
           
           super("Close");
           
           addActionListener(new ActionListener() {
               public void actionPerformed(ActionEvent ae){
                   
                   System.exit (0);
               }
           });
           setSize(bW, bH);
           
       }
    }
     
    Danke für Hinweise und Tipps
     
  2. Vielleicht hilft dir dieser Kurs hier weiter (Klick!)
  3. Flown
    Flown Administrator Mitarbeiter
    Wenn du deinen Button selbst verteilen möchtest, dann nimm das null-Layout:
    Code (Java):
    class SwingTest {
      public static void main(String[] args){
        new appFrame("Test Fenster");
      }
    }

    class appFrame extends JFrame {
     
      public appFrame(String title) {
        super(title);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setLayout(null);
        add(new appExitButton(20, 20, 100, 40));
        setSize(300, 300);
        setVisible(true);
      }
    }

    class appExitButton extends JButton {
     
      public appExitButton(int bX, int bY, int bW, int bH){
        super("Close");
        addActionListener(ae -> System.exit (0));
        setLocation(bX, bY);
        setSize(bW, bH);
      }
    }
     
    Hans Gerber gefällt das.
  4. Flown
    Flown Administrator Mitarbeiter
    Paar Verbesserungsvorschläge:
    - Composition over inheritance
    - Klassennamen werden in UpperCamelCase geschrieben
    - null-Layout is evil
     
    Hans Gerber gefällt das.
  5. Hans Gerber
    Hans Gerber Neues Mitglied
    zu Antwort #2 : danke das hat erstmal geholfen :) (schaue mir nun auch die existierenden Layout Typen an)

    zu Antwort #3:

    - Habe mir das Prinzip mal angeschaut und versuche grade es auf mein Besipiel anzuwenden. Die Vererbung der JFrame und JButton Klassen macht doch eigentlich Sinn, da ich ja alle Methoden dieser Klassen in meinen angepassten Varianten verwenden will. Oder beziehst du den Vorschlag auf das Einfügen des Buttons zum Fenster (sollte der button quasi als Parameter für den Konstruktor übergeben werden?)

    - stimmt, kannte ich auch von anderen Sprachen und hab es hier einfach vergessen :)

    - verstehe (ich vermute das liegt daran, dass wenn im Nachhinein Änderungen gemacht werden man potenziell viel per hand nachziehen muss)

    Würde mich nochmal über Feedback freuen
    Vielen Dank :)
     
  6. Thallius
    Thallius Bekanntes Mitglied
    Zu 3:

    Du benutzt die Funktionalität des JFrame aber du erweiterst sie nicht. Deshalb wäre es besser du deklarierst einfach ein JFrame anstatt davon zu erben. Erben tut man nur, wenn man die Klasse um eigene Methoden erweitet was du aber nicht vor hast.

    Das Problem des NullLayouts ist, dass du den Kunden zwingst genau deine Frame Größe zu benutzen. Das ist einfach mehr so 70er Jahre Stil wo man immer ein 80x60 Display hatte. Heute sollte ein UI immer Resizable sein. Sprich ich kann das Fenster auf meine persönliche Wohlfühlgrösse ziehen und der Inhalt passt sich dann an diese Größe an.

    Gruß

    Claus
     
    Hans Gerber gefällt das.
  7. Hans Gerber
    Hans Gerber Neues Mitglied
    Danke für die nachvollziehbaren Erklärungen.
     

Die Seite wird geladen...

Swing Button hat falsche Größe - Ähnliche Themen

eigener button in swing
eigener button in swing im Forum AWT, Swing, JavaFX & SWT
JButton Fehelr javax.swing.ImageIcon.<init>(Unknown Source)
JButton Fehelr javax.swing.ImageIcon.<init>(Unknown Source) im Forum AWT, Swing, JavaFX & SWT
Swing Basics - JButton funktioniert nicht.
Swing Basics - JButton funktioniert nicht. im Forum AWT, Swing, JavaFX & SWT
Java Swing Timer mit ButtonKlick starten u. nach 12 Sekunden Befehl ausführen
Java Swing Timer mit ButtonKlick starten u. nach 12 Sekunden Befehl ausführen im Forum Java Basics - Anfänger-Themen
In Java Swing auf Button warten?
In Java Swing auf Button warten? im Forum Java Basics - Anfänger-Themen
Thema: Swing Button hat falsche Größe