Swing Best Practices ?

oppi

Mitglied
Hallo zusammen,

ich programmiere gerade eine kleine Swing Anwendung. Nun hab ich ein paar allgemeine Fragen wie ich denn vorgehen sollte:

1. Benutze ich für jede GUI Ansicht ein neues Fenster, oder habe ich nur ein Fenster in das immer der aktuelle Content injected wird ?

2. Ist es sinnvoll für jedes GUI Element eine konkrete abgeleitete Klasse zu haben ? z.B.
Java:
public class ExitButton extends JButton

3. Dasselbe wie in Punkt 2 für die verschiedenen Actions ?

4. Was ist die einfachste Möglichkeit eine .jar zu erstellen die komplett ohne zusätzliche .jars auf anderen Rechnern ausgeführt werden kann ? (ANT ? )

5. Wenn ich ohne LayoutManager (also null) arbeite, werden manchmal Komponenten nicht angezeigt wenn ich sie mit setLocation(x,y) platziere. Woran liegt das ?

Vielen Dank schonmal :)
 

Flown

Administrator
Mitarbeiter
Also:

Zu 1.:

Da glaube ich gibt es keine Best Practice. Wenn es aufwändiger ist bevorzuge ich zumindest JTabbedPane, aber du kannst natürlich auch content "injecten".

Zu 2.:

Also konkret ableiten macht man nur wenn man das Verhalten der Klasse ändern will, sonst nimmt man nur eine Instanz davon.

Zu 3.:

Also wenn es eine "kleine" Applikation ist, dann reichen oft anonyme ActionListener

Zu 4.:

Da gibt es im Forum schon genügend Threads einfach danach suchen. Oder im einfachsten Falle eine executeable JAR von Eclipse erstellen lassen(geht auch von der Kommandozeile aus).

Zu 5.:

Ohne Code keine Ahnung


Also ein Gegenbeispiel für 2., 3. ist:

Java:
public MyProgramm extends JFrame implements ActionListener { //... }
 
G

Gast2

Gast
Java:
public MyProgramm extends JFrame implements ActionListener { //... }

Sowas würde ich schon mal gar nicht machen!!!

Ansonsten ist es fast nie nötig von Komponenten (außer vielleicht JComponent für eine komplett eigene) zu erben.
Du kannst Factorys und Kompositionen anstatt Vererbung verwenden oder was soll dein Button besonderes können?

NullLayout NIE verwenden wurde schon erwähnt
 
G

Gast2

Gast

oppi

Mitglied
Danke für euren Input, hat mir sehr geholfen !

Benutze bisher das GridLayout, scheint für meine Zwecke gut zu passen, nur die JList wird dadurch noch etwas gequetscht :(
 

oppi

Mitglied
Also ich hätte gerne das die JList etwas größer als die anderen Elemente erscheint. Muss ich dazu das (komplexere) GridBagLayout nutzen ?

Java:
public class KlassenEditorFrame extends JFrame {
  private Klasse klasse;
  
  public KlassenEditorFrame(Klasse klasse) {
    super(klasse.getBezeichnung());
    this.klasse = klasse;
    setLayout(new GridLayout(3, 2, 8, 8));
    // setLayout(new FlowLayout());
    initializeComponents();
    setSize(300, 150);
  }
  
  private void initializeComponents() {
    JTextField schuelerInput = new JTextField();
    this.add(schuelerInput);
    
    JButton addButton        = new JButton("Hinzufügen");
    this.add(addButton);
    
    
    
    JButton deleteButton        = new JButton("Entfernen");
    this.add(deleteButton);
    
    JButton submitButton = new JButton("Ok");
    this.add(submitButton);
    
    JList schuelerListe      = new JList();
    this.add(new JScrollPane(schuelerListe));
  }
}
 

Ähnliche Java Themen

Neue Themen


Oben