Java Fenster , warum verändert es Größe nicht?
Hi, also ich verstehe nicht warum hier die Größe und location nicht geändert wird von dem Button
package Skript;
import javax.swing.*;
import java.awt.*;
public class fensterklassen extends JFrame {
private int clicks = 0;
public fensterklassen(){
JPanel southPanel = new JPanel(); //erzeugt neues Panel -> Behälter für weiter Komponenten (flowlayout)
JButton clickButton = new JButton(clicks + ""); //erzeugt neuen button -> beschriftung übergeben wir als Komponenete
southPanel.add(new JLabel("Count clicks:")); // fügt label hinzu
southPanel.add(clickButton);//fügt nach panel den button hinzu
this.add(southPanel, BorderLayout.SOUTH);//fügt dem fesnster im süden den panel hinzu
clickButton.setSize(10, 10);
clickButton.setLocation(50, 50);
//pack(); //legt optimal größe des fenster fest
southPanel.setSize(100, 200);
setVisible(true);//macht fenster sichtbarkeit fest
}
public static void main(String[] args) {
new fensterklassen();
}
}
3 Antworten
So neuer Versuch:
Du könntest ein sogenanntes NullLayout nutzen und deine Positionen selbst „managen“.
Setze dafür das Layout für dein Content Pane:
contentPane.setLayout(null);
Dann kannst du deinen JButton mit folgender Zeile beliebig einfügen:
contentPane.add(DEIN_JBUTTON);
DEIN_JBUTTON.setBounds(x, y, width, height);
Für x, y, width und height bitte meine Erklärung unten anschauen.
Wichtig!: dein Content Pane (in deinem Beispiel southPanel genannt) braucht auch eine eigene Größe, natürlich auch wieder mit
contentPane.setBounds(x, y, width, height);
Dein kompletter Code sieht dann komplett aus:
public DeineKlasse extends JFrame {
public DeineKlasse {
setBounds(100, 100, 1280, 720);
setLayout(null);
JPanel contentPane = new JPanel();
contentPane.setBounds(0, 420, 1280, 300);
add(contentPane);
JButton button = new JButton();
button.setBounds(20, 600, 120, 100);
contentPane.add(button);
}
}
Ich habe hierbei nicht auf JavaConventions geachtet und für Rechtschreibfehler komme ich nicht auf. Konnte ebenfalls den Code nicht testen, weil ich immer noch am Handy bin.
Sorry & viel Glück😇
Setze nicht nur vom Layout deine Größe, sondern direkt vom JFrame.
Da du vom JFrame erbst, könntest du in deinem Konstruktor folgendes schreiben:
setBounds(x, y, width, height);
Sprich bei einem Fenster, dass oben links sich öffnen soll mit einer „HD-Größe“ setze für:
x -> 100
y -> 100
width -> 1280
height -> 720
Am Ende sollte dein Konstruktor vor deinem southPanel das folgende stehen haben:
// KlassenCode
public DeinKonstruktor {
setBounds(100, 100, 1280, 720);
// Weiterer Code
}
Nochmal sorry, falls ich ein paar Logikfehler hier drinnen habe und ggf. die Werte getauscht sind: bin gerade am Handy. Ich wünsche dir Glück!
KOMMANDO ZURÜCK: Habe die Frage nicht vollständig gelesen
Sorry habe jetzt eine ausführliche Antwort zu deinem Button-Problem oben geschrieben. Habe mich ernsthaft eben verlesen, sorry 🥹
In der ersten Zeile steht im Kommentar "flowLayout". Dann wird die Position der enthaltenen Komponenten von der layout engine festgelegt. Meine Vermutung.
hab jetzt einfach das Layout geändert , danke für den Tipp :)
southPanel.setLayout(new BorderLayout());
ja das ist mein Kommentar ;) hab gedacht ein Panel hat als Standard das Flowlayout
Ah ja ,bezieht sich jetzt nicht auf meine Frage, aber trotzdem gut zu wissen. Danke dir.
Hab auch nochmal drüber geschaut:
durch die Zeile kann ich nicht wehrlos mein Button platzieren, nur im Süden. Die größe lässt sich gut anpassen.