LayoutManager Wie und welches Layout nutze ich am Besten?

Soloeco

Aktives Mitglied
Hey Leute,
ich bin noch relativ neu in der Java-Sprache und probiere ein paar Kleinigkeiten einfach einmal aus.
- Ich habe jetzt die Frage wie ich (in meinem folgenden Code) am Besten ein Layout (welches Layout empfiehlt sich?) einfügen kann, damit ich die Komponenten nicht immer per Koordinaten zuweisen muss aber dennoch ich möglichst frei entscheiden kann was wohin kommt?
- Ich habe verschiedene Möglichkeiten gesehen ein Frame zu erzeugen, was haltet ihr von dieser hier und habt ihr Verbesserungsvorschläge?
Wie gesagt, ich bin Anfänger und freue mich über Tipps mit Erklärung dann dazu bitte 🙂
Java:
import javax.swing.*;
import java.net.URL;
import java.awt.*;

public class soloeco extends JFrame {
 
    private static final long serialVersionUID = 1L;

    public static void main(String[] args) {
     
        new soloeco();
    }
 
    public soloeco() {
     
        super("Soloeco");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setExtendedState(JFrame.MAXIMIZED_BOTH);
        setLayout(null);
     
        final JLabel background = new JLabel("");
        background.setBounds(0,0,1920,1080);
        URL background_url = this.getClass().getResource("soloeco.jpg");
        background.setIcon(new ImageIcon(background_url));
        background.setVisible(true);
        add(background);
        setVisible(true); //frame
     
        final JButton evolution = new JButton("Evolution");
        evolution.setSize(200,40);
        evolution.setVisible(true);
        evolution.setLocation(900,400);
     
        add(evolution);
    }

}
Mit freundlichen Grüßen
Soloeco
 
Zuletzt bearbeitet von einem Moderator:
Moin,
ganz schnell
1. Klassennamen schreibt man Groß
2. nicht von JFrame erben, wenn du ihn nicht erweiterst, lieber ein Objekt erstellen JFrame frame =new JFrame();
3. ich arbeite gerne noch mit einem JPanel, das ich auf den Frame adde, und nicht mit einem JLabel. Habe ich den fall das ich ein JLabel brauche kommt erst der Frame, dann das Panel und auf das Panel das Label.

Oracle anleitung für Layouts

Ich mag das GridBagLayout am liebsten, ist aber auch eines der Aufwändigeren
grüße
 
Weshalb nicht von JFrame erben? Nur für mein Verständnis.
Und das mit dem JPanel stimmt, ist eine gute Idee, danke dir für die Antworten 😉
 
man kann nnicht grundsätzlich sagen dass man von jframe erbt, denn das widerspricht dem konzept der objektorientierung. was bringt es dir denn wenn du ein jframe "bist"? von etwas erben heißt es um funktionalität erweitern. das willst du aber nicht. du willst es verwenden.
man kann aus deinem code leider nicht sehen, was du vorhast, deswegen ist es schwer eine aussage über das zu verwendende layout zu machen.
mit dem vorschalg von strußi und dem jpanel geht das wie folgt:
also würde das heißen du hast deine klasse
Java:
public class Soloeco {
    private JFrame f = new JFrame("Frame Title");[/COLOR]
    private JPanel panel = new JPanel();

[COLOR=#000000]    public Soloeco() {
        // panel hat standardmäßig ein FlowLayout
        // mit setLayout kannst du jetzt ein beliebiges layout setzen. du brauchst dann kein setBounds mehr
        panel.setLayout(new BorderLayout());[/COLOR]
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(800, 600);
        f.setVisible(true);
[COLOR=#000000]    }
}

außerdem noch zum code: einzelne components werden nicht visible gesetzt (bei dir der background).
und du solltest es wegen namenszweideutigkeiten deine imports mit * zu definieren. importiere einfach die klassen di du brauchst konkret und alles ist gut. wenn du eine anständige IDE verwendest, sollte das sowieso schon von haus aus so gemacht werden.

zur anwendung von verschiedenen awt layoutmanagern folge dem link von strußi, der ist gut.

javampir
 
Also ich möchte gerne eine Art kleines Wiki daraus machen (ich weiß ich bin weit entfernt, probiere auch nur nebenbei herum).
Da dachte ich mir dass ich ein Frame brauche wie ich es in meinem Code (oben) bereits hatte. Ich verstehe auch was der Code von dir machen soll javampir jedoch kam mir eine neue Frage auf: Was ist die beste Möglichkeit ein ganz simples Frame ohne alles zu erzeugen was jedoch gut erweiterbar ist? Zum beispiel wie ich es hatte in meinem Code oder doch besser eine eigene Methode die dann im Constructor ausgeführt wird?
Ich bin gerade etwas verwirrt 😵
 
Da habe ich mich falsch ausgedrückt, tut mir leid. Ich meinte damit eigentlich dass man ganz simpel weitere components einfügen kann wie JPanel etc.
 
moin
@javampir, ich habe das erben von JFrame nicht komplett ausgeschlossen, sondern nur wenn man dessen Funktionalität nicht erweitern möchte.

@Soloeco, der Vorteil, wenn du mit Panels arbeitest, ist dieser, das du ein Hauptpanel mit einem bestimmten Layout z.B. Borderlayout anlegen kannst und in die einzelnen Bereiche nochmal ein Panel mit einem komplett anderen Layout für die in diesem Bereich geeignete Anordnung adden kannst
Aufbau wäre dann ähnlich dem Frameset in HTML
JFrame <- MainPanel <-Bereichspanel 1
<-Bereichspanel 2 ...
 
Kurz gesagt: JavaFX soll bzw. wird Swing ablösen.

Falls du mehr wissen willst, findest du mit Google einen Haufen Gegenüberstellungen und Vergleiche.
 

Zurück
Oben