JButton zieht sich über das ganze Fenster?


25.10.2020, 21:01

Bitte nicht allzu kompliziert erklären, bin noch großer Anfänger und habe keine Ahnung von irgendwelchen Fachbegriffen.

1 Antwort

Vom Beitragsersteller als hilfreich ausgezeichnet

Ja, das ist ein Standardverhalten des Standard-Layouts des JFrame. Du könntest ein FlowLayout verwenden.

Entweder für den Frame:

JFrame fenster = new JFrame("Gui");
fenster.setLayout(new FlowLayout());

JPanel panel = new JPanel();
fenster.add(panel);

JButton btn1 = new JButton("Button");
btn1.setPreferredSize(new Dimension(200, 150));
fenster.add(btn1);

fenster.setSize(600, 400);
fenster.setVisible(true);

Oder du ordnest den Button in das Panel ein:

JFrame fenster = new JFrame("Gui");

JButton btn1 = new JButton("Button");
btn1.setPreferredSize(new Dimension(200, 150));

JPanel panel = new JPanel();
panel.add(btn1);

fenster.add(panel);

fenster.setSize(600, 400);
fenster.setVisible(true);

Beachte in beiden Fällen

  • dass die setPreferredSize-Methode beim Definieren einer Größe vorgezogen werden sollte. Ob eine feste Größenangabe überhaupt berücksichtigt wird, ist vom verwendeten Layout abhängig, daher solltest du dich weitergehend mit Layout Managern beschäftigen. Sollte dir das System zu kompliziert erscheinen, verwende einen Swing Builder (wie er in Eclipse, NetBeans, IntelliJ, o.a. bereits integriert ist) für Drag & Drop oder schau dir die MiGLayout-Bibliothek an. Noch eine andere Option wäre es, sich stattdessen mit dem moderneren OpenJFX zu beschäftigen.
  • die Reihenfolge der Anweisungen. Dadurch, dass du setVisible für den Frame so früh aufrufst, ist Swing intern dazu gezwungen, das Fenster mehrmals komplett neu zu zeichnen, obwohl ein Zeichenvorgang ausreichen würde.

Zuletzt noch hierzu:

(...) bin noch großer Anfänger und habe keine Ahnung von irgendwelchen Fachbegriffen.

Solltest du generell noch keine Ahnung von OOP haben, wäre das Erstellen von Anwendungen mit grafischer Oberfläche definitiv noch nichts, mit dem du dich bereits beschäftigen solltest, denn in diesem Feld werden diese Kenntnisse fest vorausgesetzt.

Solltest du lediglich neu vor Swing stehen, dann nutze die Tutorials von Oracle:

https://docs.oracle.com/javase/tutorial/uiswing/index.html

Sie mögen etwas alt sein, sind aber zuverlässig und beschreiben das Swing Konzept richtig, wie es viele andere Tutorials (auf YouTube, etc.) leider nicht tun.