Fenster und darin Button

smau

Mitglied
Hallo zusammen,

ich möchte ein Fenster erzeugen und in dieses Fenster dann einen Button einfügen.
Wie ich einen Button und ein Frame erzeuge weiss ich, jedoch klappt das beides in einander nicht.

[JAVA=42]package Fenster;

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

public class Fenster extends JFrame {

JButton button = new JButton("Button");
JFrame frame = new JFrame("FRAME");


public Fenster() {
frame.setSize(500, 200);
frame.add(button);
button.setSize(250,50);
frame.setBackground(Color.red);

pack();
setDefaultCloseOperation(EXIT_ON_CLOSE);
}

public static void main(String[] args) {
new Fenster().setVisible(true);
}
}
[/code]
 
Zuletzt bearbeitet:
G

Gast2

Gast
Das ganze macht auch so keinen Sinn.
Du erbst von JFrame, d.h. deine Klasse Fenster ist schon ein Fenster. Darin erstellst du dann nen neues Frame (dass du nicht sichtbar machst!) und addest dem unsichtbaren Frame den button.

Also entweder:

Java:
public class Fenster extends JFrame {
    private JButton b = new JButton("test");
    
    public Fenster() {
        super("testframe");
        add(b);

        pack();
    }

    public static void main(String[] args) {
        new Fenster().setVisible(true);
    }
}

Oder:
Java:
public class Fenster {
    private JFrame f = new JFrame("testframe");
    private JButton b = new JButton("test");
    
    public Fenster() {
        f.add(b);

        f.pack();
        f.setVisible(true);
    }

    public static void main(String[] args) {
        new Fenster();
    }
}
 

L-ectron-X

Gesperrter Benutzer
Um deinen Quelltext mal wiederzuverwenden:
Java:
import java.awt.*;
import javax.swing.*;
 
public class Fenster extends JFrame {
 
    JButton button = new JButton("Button"); 
    
    public Fenster(String title) {
        super(title);
        this.setLayout(new GridBagLayout());
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.getContentPane().setBackground(Color.RED);
        this.add(button);
        this.setPreferredSize(new Dimension(400, 300));
        this.pack();
        this.setLocationRelativeTo(null);
        
    }
    
    public static void main(String[] args) {
        new Fenster("Ein Button im JFrame").setVisible(true);
    }
}
 

smau

Mitglied
Es funktioniert so, danke. Habs glaub ich auch verstanden.

Jedoch wie kann ich z.b. die Größe des Fenster jetzt ändern? Ich weiss, dass das mit setSize(200,200) geht, aber auf welches Objekt wende ich diese Methode an?
 

L-ectron-X

Gesperrter Benutzer
Auf der Komponente, die du ändern willst.
Also, wenn du gerade im JFrame bist (wenn du von JFrame erbst) machst du das auf der this-Referenz, wenn du eine Instanz von einem JFrame erzeugt hast, machst du das entsprechend auf der Instanz.
 

smau

Mitglied
Hab das gerade mal probiert, aber weder vom Button noch von dem Fenster ändert sich die Größe.

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

public class Fenster extends JFrame {
    JButton b = new JButton("test");

    public Fenster() {
        super("testframe"); // Name des Fensters
        this.setSize(500, 100);
        add(b);
        b.setSize(200, 200);

        pack();
    }

    public static void main(String[] args) {
        new Fenster().setVisible(true);
    }
}

Es funktioniert mit dem oben geposteten Code und einer kleinen Veränderung. Wusste nicht, dass man es mit prefferedSize machen muss. Ist setSize dafür nicht geeignet?

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

public class Fenster extends JFrame {

    JButton button = new JButton("Button");

    public Fenster() {
        super("test");
        this.setLayout(new GridBagLayout());
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.getContentPane().setBackground(Color.RED);
        this.add(button);
        button.setPreferredSize(new Dimension(200, 100));
        this.setPreferredSize(new Dimension(400, 300));
        this.pack();
        //this.setLocationRelativeTo(null);

    }

    public static void main(String[] args) {
        new Fenster().setVisible(true);
    }
}
 
Zuletzt bearbeitet:
G

Gast2

Gast
Das ganze hängt mit den Layoutmanagern zusammen, das solltest du dir vllt erst einmal durchlesen.
Using Layout Managers (The Java™ Tutorials > Creating a GUI With JFC/Swing > Laying Out Components Within a Container)

Zu deinem Problem:
die
Code:
pack();
bewirkt dass alle Elemente auf dem Frame neu ausgerichtet werden. Außerdem passt sich das Frame dann an die neue Größe der Elemente an.
Daher haben deine gesetzten Größen keine Auswirkung.
Wenn du wirklich alles "per Hand" platzieren willst solltest du das null-layout verwenden (setLayout(null);). Dann passen sich deine Elemente allerdings nicht der Framegröße an, das ganze wirkt also recht statisch.

Java:
public class Fenster extends JFrame {
    JButton b = new JButton("test");

    public Fenster() {
        setLayout(null);

        add(b);

        b.setSize(200, 200);
        this.setSize(500, 100);
    }

    public static void main(String[] args) {
        new Fenster().setVisible(true);
    }
}
 

smau

Mitglied
Das ganze hängt mit den Layoutmanagern zusammen, das solltest du dir vllt erst einmal durchlesen.
Using Layout Managers (The Java™ Tutorials > Creating a GUI With JFC/Swing > Laying Out Components Within a Container)

Zu deinem Problem:
die
Code:
pack();
bewirkt dass alle Elemente auf dem Frame neu ausgerichtet werden. Außerdem passt sich das Frame dann an die neue Größe der Elemente an.
Daher haben deine gesetzten Größen keine Auswirkung.
Wenn du wirklich alles "per Hand" platzieren willst solltest du das null-layout verwenden (setLayout(null);). Dann passen sich deine Elemente allerdings nicht der Framegröße an, das ganze wirkt also recht statisch.

Java:
public class Fenster extends JFrame {
    JButton b = new JButton("test");

    public Fenster() {
        setLayout(null);

        add(b);

        b.setSize(200, 200);
        this.setSize(500, 100);
    }

    public static void main(String[] args) {
        new Fenster().setVisible(true);
    }
}
Das mit den Layoutmanagern habe ich nachgeschlagen. Das mit Layout(null) soetwas hatten wir auch in der Vorlesung. Diese Lösung ist ja ziemlich kurz und geht.:)
Wobei die andere auch geht, wobei da ein paar Dinge drin sind, die ich noch nicht kenne.
 

L-ectron-X

Gesperrter Benutzer
Das "NullLayout" ist eigentlich selten brauchbar, es gibt nur ganz wenige Anwendungsfälle, von denen mir auch gerade keine einfallen...
Ich habe oben das GridBagLayout eingebaut, weil es erst mal nur darum ging, einen Button schnell und unkompliziert in einen JFrame zu setzen.
Du kannst deinen JFrame auch in der Größe per setSize() ändern, wenn du den pack()-Aufruf entfernst. Dieser ist dafür verantwortlich, dass alle Komponenten im JFrame entsprechend ihrer PreferredSize gezeichnet werden.
 

smau

Mitglied
Ok, dass mit dem pack() habe ich gedacht wäre etwas anderes und hab es dummerweise nicht nachgeschlagen...

Ich hab das ganze jetzt mal ohne this gemacht und es geht, warum?
 

L-ectron-X

Gesperrter Benutzer
this muss nicht zwingend vor die Methoden geschrieben werden, wenn die Klasse in der du dich befindest die Methoden erbt bzw. implementiert.
 

smau

Mitglied
Besten Dank, damit habt ihr mir schonmal sehr geholfen. Mir ist einiges klarer geworden...

Ich hätte noch eine Frage, die zwar ein anderes Thema ist, aber ich will dafür nicht nen extra Thread aufmachen.

Ich möchte, wenn ich das Panel betrete, dass sich die Farbe ändert. Der Rest des Programms ist richtig nur dieser Teil nicht:
Java:
 MouseListener ml = new MouseAdapter() {

        @Override
        public void mouseEntered(MouseEvent e) {
            JComponent comp = (JComponent) e.getSource();
            comp.setForeground(Color.red);
        }
 

smau

Mitglied
Ich möchte, wenn ich das Panel betrete, dass sich die Farbe ändert und wenn ich aus dem Panel gehe ne andere Farbe kommt. Und das funktioniert nicht. Sonst ist das Anzeigefenster da, nur die Farbänderung klappt nicht.

EDIT: Hat sich erledigt. Es klappt! :)
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
M suche geeignetes Fenster zur Anzeige AWT, Swing, JavaFX & SWT 49
berserkerdq2 Kann ich ein Rechteck mittig im Fenster halten, egal wie ich die Bildschirmgröße verändere? AWT, Swing, JavaFX & SWT 3
W 2 JTables in einem Swing-Fenster? AWT, Swing, JavaFX & SWT 5
berserkerdq2 Wie füge ich ein Bild in javafx mit dem Scenebuilder ein, das automatisch mitgezogen wird, wenn das Fenster vergrößert wird oder Vollbildmodus AWT, Swing, JavaFX & SWT 6
TheSepp Fenster um x Pixel bewegen, wenn man auf dem Knopf drückt AWT, Swing, JavaFX & SWT 10
J JavaFx PDF in einem Element in einem Fenster anzeigen. AWT, Swing, JavaFX & SWT 11
K JavaFX unterschiedliche (mehrere Fenster) in seperater Main Methode AWT, Swing, JavaFX & SWT 26
_user_q Kann man ein 2. JavaFX-Fenster auch beenden (exit) statt schließen (close) lassen? AWT, Swing, JavaFX & SWT 8
L Swing Files abspeichern mit Save as Dialog Fenster AWT, Swing, JavaFX & SWT 5
OZAN86 einfaches Fenster öffnen scheitert AWT, Swing, JavaFX & SWT 18
G Zuletzt aktives Fenster, vor dem aktuell aktiven AWT, Swing, JavaFX & SWT 2
sserio Kann man bei JavaFx ein Fenster aufkommen lassen? AWT, Swing, JavaFX & SWT 1
Z GUI Forms - Mehrere Fenster in einem Projekt AWT, Swing, JavaFX & SWT 18
S Swing Alles beenden bei Fenster mit Scroll-Balken AWT, Swing, JavaFX & SWT 6
CptK windowClosed() nur aufrufen, wenn Fenster nicht über Button geschlossen wird AWT, Swing, JavaFX & SWT 1
W Zweites/neues Fenster durch Button öffnen AWT, Swing, JavaFX & SWT 6
CptK Fokus auf geöffnetes Zweit-Fenster setzen und Eingaben außerhalb blocken AWT, Swing, JavaFX & SWT 2
B Text mit Absatz + OK-Button, der Fenster wieder schließt AWT, Swing, JavaFX & SWT 7
MiMa JavaFX Fenster in JavaFX öffnen Schliessen (Initialisierung) AWT, Swing, JavaFX & SWT 20
N Kontextmenü (Popup-Fenster) erstellen AWT, Swing, JavaFX & SWT 3
L Hintergrundbild im Fenster darstellen AWT, Swing, JavaFX & SWT 9
P JavaFX Fenster wird nicht angezeigt (Mac) AWT, Swing, JavaFX & SWT 13
VPChief Buttons Reagieren erst wenn ich Fenster minimiere AWT, Swing, JavaFX & SWT 4
B JavaFX TextField Eingabe in neues Fenster übernehmen AWT, Swing, JavaFX & SWT 4
N Drag and Drop Fenster AWT, Swing, JavaFX & SWT 11
A Swing JTextField an Button übergeben für Popup-Fenster funktioniert nicht AWT, Swing, JavaFX & SWT 3
P JavaFX Zugriff auf Fenster/Layout-Container in eigenen Klassen AWT, Swing, JavaFX & SWT 5
Bluedaishi JavaFX Programm start mit zwei scenen bzw Fenster AWT, Swing, JavaFX & SWT 1
J Fenster mit Inhalten aus einem Array Füllen AWT, Swing, JavaFX & SWT 4
S Swing Fenster State Machine AWT, Swing, JavaFX & SWT 1
A Fenster genau unterhalb von JTextField anzeigen AWT, Swing, JavaFX & SWT 1
J Overlay Panel statt neues Fenster AWT, Swing, JavaFX & SWT 6
S Swing Bei start des Programmes kein Fenster zu sehen AWT, Swing, JavaFX & SWT 1
X Neues Fenster mit Button öffnen und bearbeiten AWT, Swing, JavaFX & SWT 4
platofan23 JAVAFX zweites Fenster öffnen AWT, Swing, JavaFX & SWT 2
M JavaFX Altes Fenster (FXML Datei) löschen AWT, Swing, JavaFX & SWT 16
P JavaFX Fenster lädt nicht mehr AWT, Swing, JavaFX & SWT 4
I AWT Listener während man in anderem Fenster ist AWT, Swing, JavaFX & SWT 4
S JavaFX Fenster aufkommen lassen, wenn mit der Maus über bestimmten Bereich fahren AWT, Swing, JavaFX & SWT 1
L Java- UI zweites Fenster aus einer anderen Klasse öffnen durch ButtonClick AWT, Swing, JavaFX & SWT 4
D Swing Neues (3.) Fenster öffnen AWT, Swing, JavaFX & SWT 2
G JavaFX Fenster 1 Array übertragen zur Fenster 2 AWT, Swing, JavaFX & SWT 0
I JavaFX Fenster wird auf einem anderen Rechner anders dargestellt AWT, Swing, JavaFX & SWT 5
K Fenster welches den Sieger anzeigt AWT, Swing, JavaFX & SWT 5
O JavaFX Fenster scließen AWT, Swing, JavaFX & SWT 4
A Swing Fenster ändert Position bei Mausklick nicht AWT, Swing, JavaFX & SWT 2
S SWT neues Fenster, buttons aus alten etc... AWT, Swing, JavaFX & SWT 0
D Java FXML mehrere Fenster AWT, Swing, JavaFX & SWT 4
L Input aus Sub-Fenster Startfenster übergeben AWT, Swing, JavaFX & SWT 5
B AWT Fenster schließt nicht AWT, Swing, JavaFX & SWT 2
H JavaFX Kriege fehler beim Fenster wechseln AWT, Swing, JavaFX & SWT 7
G Swing Wenn ich mein JFrame Fenster vergrößere die Inhalte anpassen AWT, Swing, JavaFX & SWT 1
U Swing Inhalt vom Fenster wird erst durch Hovern oder Klicken sichtbar AWT, Swing, JavaFX & SWT 3
A Nach klick auf Button neuen Inhalt im gleichen Fenster AWT, Swing, JavaFX & SWT 3
T Fenster schließen AWT, Swing, JavaFX & SWT 4
K JavaFX ObservableList + Fenster AWT, Swing, JavaFX & SWT 6
windl Transparentes / halbtransparentes Fenster AWT, Swing, JavaFX & SWT 1
K Fenster mittig im Vollbildschirm - ok, aber ... AWT, Swing, JavaFX & SWT 2
N Swing Sorry nicht mal ein Fenster öffnen... AWT, Swing, JavaFX & SWT 19
S actionlistener mit 2 fenster integrieren AWT, Swing, JavaFX & SWT 11
G Event Handling TableView daten in ein neues Fenster herauslesen? AWT, Swing, JavaFX & SWT 3
C Benutzername in GUI eingeben und nach Spiel neues Fenster Benutzername wieder anzeigen AWT, Swing, JavaFX & SWT 1
C Durch klicken von Button neues Fenster oeffnen AWT, Swing, JavaFX & SWT 18
D JavaFX (WebStart) Graues Fenster beim Start AWT, Swing, JavaFX & SWT 4
J Button vergrößert sich bei Fenster resize AWT, Swing, JavaFX & SWT 22
L Zweites Fenster mit Thread AWT, Swing, JavaFX & SWT 0
Paul15 Zwei Fenster AWT, Swing, JavaFX & SWT 23
T LayoutManager Methode, um Bildschirm(fenster) für Aktualisierungen zu blockieren bzw. freizugeben gesucht AWT, Swing, JavaFX & SWT 2
C AWT Problem mit Protokol Fenster AWT, Swing, JavaFX & SWT 0
L Daten in neuem Fenster AWT, Swing, JavaFX & SWT 2
D Mit Klick auf Button ein neues Fenster erzeugen AWT, Swing, JavaFX & SWT 11
I JTable: Doppelklick auf Table soll neues Fenster öffnen und Daten aus JTable anzeigen AWT, Swing, JavaFX & SWT 4
A Swing Textübergabe innerhalb der Anwendung in unterschiedlichen Fenster AWT, Swing, JavaFX & SWT 8
wolfgang63 JavaFX Animation, Kreise im vorgegebem Takt durchs Fenster laufen lassen AWT, Swing, JavaFX & SWT 3
K Java Button öffnet neues Fenster AWT, Swing, JavaFX & SWT 5
Z Fenster leer, wenn ich ein JTextField erzeuge AWT, Swing, JavaFX & SWT 3
W Swing JScrollPane für mein Fenster AWT, Swing, JavaFX & SWT 4
X Swing 2 Fenster (1 im Vordergrund) AWT, Swing, JavaFX & SWT 6
X Swing Ein neues Fenster öffen aber ohne ein extra Prozess zu starten AWT, Swing, JavaFX & SWT 1
T JavaFX ControlsFX-Notification öffnet nicht wenn kein JavaFX-Fenster offen. AWT, Swing, JavaFX & SWT 1
E JavaFX JavaFX Fenster nicht schließen AWT, Swing, JavaFX & SWT 4
K JavaFX Fenster aufrufen über Menü AWT, Swing, JavaFX & SWT 1
thet1983 offne Fenster gemeinsam schließen AWT, Swing, JavaFX & SWT 8
H AWT Fenster- und JLabel-Größe automatisch anpassen AWT, Swing, JavaFX & SWT 2
Z JSlider im Modalen-Fenster AWT, Swing, JavaFX & SWT 0
Tort-E JavaFX Fenster nachladen AWT, Swing, JavaFX & SWT 1
V Fenster in einem Fenster anordnen AWT, Swing, JavaFX & SWT 7
I Zwei Fenster nebeneinander anzeigen AWT, Swing, JavaFX & SWT 2
U Fenster beim Vergörßern immer quadratsich AWT, Swing, JavaFX & SWT 7
Q Swing Fenster updaten - Hinzugefügte Komponenten darstellen AWT, Swing, JavaFX & SWT 3
E Alles in einem Fenster AWT, Swing, JavaFX & SWT 5
A Fenster erstellen AWT, Swing, JavaFX & SWT 2
I Swing Beim Fenster das kleine Symbol(ICS) ändern AWT, Swing, JavaFX & SWT 3
K JavaFX Vorschau Bereich/Fenster einer bestehenden Group AWT, Swing, JavaFX & SWT 3
G Scrollbar für das Fenster einfügen AWT, Swing, JavaFX & SWT 3
X Fenster von außen ansprechen AWT, Swing, JavaFX & SWT 7
brunothg Swing JTable -> AUTO_RESIZE_OFF aber das Fenster ausfüllen AWT, Swing, JavaFX & SWT 0
G jLabel aus anderem Fenster ändern AWT, Swing, JavaFX & SWT 7
G JavaFX Neues Fenster erstellen AWT, Swing, JavaFX & SWT 3
A SWT Fenster bei MouseOver vergrößern AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben