Layout auslagern, aber wie genau???

Status
Nicht offen für weitere Antworten.

Hummel

Mitglied
Hallo,
ich habe über Progrmmierung mit Java (Java Software-Engineering) gelesen :rtfm: , dass bei einer Erstellung eines Java Programms die Klassen auf mehrere Pakete aufgeteilt werden sollten oder können (natürlich logisch durchdacht). Nun möchte ich gerne versuchen mein Layout auszulagern, um mein Programm (gerade die Quelldateien) übersichtlicher zu gestalten. Nur ich habe keine Ahnung wie ich an die Sache herangehen soll. :bahnhof:

Hat diesbezüglich jemand einen Tipp für mich, also einen Stoß in die richtige Richtung?

Danke und Gruß,

Hummel
 

The_S

Top Contributor
Was verstehst du unter Layout? Hast du ein eigenen Layout-Manager geschrieben? Ist das "Layout" schon in einer separaten Klasse? Ein wenig spezifischere Informationen (z. B. aktuelle Klassen/Package Struktur) wären hilfreich.
 

Hummel

Mitglied
Also ich habe ein einfaches Programm, ein paar JButtons, JTextAreas und ein Menü (zum Beispiel).

Nehmen wir die Klasse FrameMain.java, darin befinden sich die Swing Komponenten (in einem Frame) und darin wird das Ganze mittels GridBagLayout 'schön' gerückt.
Jetzt wird der Quelltext duruch das ganze Layouten ein gutes Stück länger und auch unübersichtlicher. Als Beispiel meiner Programmstruktur:

Java:
package xyz;
import javax.swing.*;
//usw... was man halt so braucht

public class MainFrame extends JFrame {
//Refrenzen der Swing Komponenten
//z.B.
private JButton bNew;

initComponents();
layoutComponents();
}

private void initComponents() {
//Instanzen/Referenzen erstellen/zuweisen
//also z.B.
bNew = new JButton("New");
}

private void layoutComponents() {
Container pane = this.getContentPane();
pane.setLayout(new GridBagLayout());
//...
}

//hier methoden usw...

public static void main(String[] args){
//...
}
}

Nun wird bei mehreren Komponenten der Layoutteil sehr lang und ich habe den Autor des Buches so vertanden, dass z.B. der ganze Layoutteil in ein separates Paket gepackt wird. Dann kann man daneben noch die Frames/Dialogs, also die Benutzeroberfläche in ein getrenntes und die Klassen zu Kommunikation mit einer Datenbank o.ä in ein Paket verfrachten.
Ich plane ein größeres Projekt und wollte es mal professionell angehen :) !!! Deswegen habe ich mir ein Buch geliehen und :rtfm: , allerdings ist dieses Buch nicht wirklich hilfreich gewesen, muss noch mal weitersuchen.

Jetzt dachte ich ich kürze die Thematik mal ab und frage hier mal im Forum, ob das überhaupt der richtige Weg ist (oder gar ein Holzweg) und wenn ja, in welche Richtung ich suchen muss. Vielleicht reichen ja auch 4 5 6 zarte Zeile Quelltext und meine Scuhe ist beendet?!?!?

Ich hoffe es ist deutlicher geworden, sonst versuche ich noche einen nachzulegen.

Gruß, Hummel
 

Marco13

Top Contributor
Hm. Das eigentliche Erstellen des Layouts in eine eigene Klasse zu packen klingt erstmal merkwürdig. Vielleicht hast du zu viele Components in EINEM Container (mit EINEM sher komplizierten GridBagLayout).

Ich find's mit privaten Methoden, die an die "Grobstruktur" des Layouts angelehnt sind, eigentlich ganz übersichtlich:
Java:
private JPanel createMainPanel()
{
    JPanel mainPanel = new JPanel(new BorderLayout());
    mainPanel.add(createControlPanel(), BorderLayout.NORTH);
    mainPanel.add(createPaintPanel(), BorderLayout.CENTER);
    mainPanel.add(createStatusPanel(), BorderLayout.SOUTH);
    return mainPanel;
}

private JPanel createControlPanel()
{
    JPanel controlPanel = new JPanel(new GridLayout(1,0));
    controlPanel.add(createSomeButton());
    controlPanel.add(createSomeButton());
    controlPanel.add(createSomeButton());
    return controlPanel;
}
...

Als Alternative, wenn man eine Component mit einem "festen" Satz von Untercomponents hat, KANN es sinnvoll sein, dafür eine eigene Klasse zu machen - das lässt sich dann nachträglich recht einfach machen:
Java:
private JPanel createMainPanel()
{
    JPanel mainPanel = new JPanel(new BorderLayout());
    mainPanel.add(createControlPanel(), BorderLayout.NORTH);
    mainPanel.add(createPaintPanel(), BorderLayout.CENTER);
    mainPanel.add(createStatusPanel(), BorderLayout.SOUTH);
    return mainPanel;
}

private JPanel createControlPanel()
{
    return new ControlPanel();
}
...


class ControlPanel extends Panel()
{
    public ControlPanel()
    {
        super(new GridLayout(1,0));
        createSomeButton();
        createSomeButton();
        createSomeButton();
    }
    ....
}

Die eigentliche Herausforderung besteht (für mich dann) eher darin, eine sinnvolle Struktur (d.h. ein "Matching") zwischen den Logik-Klassen und den GUI-Klassen zu finden...
 

Hummel

Mitglied
Die eigentliche Herausforderung besteht (für mich dann) eher darin, eine sinnvolle Struktur (d.h. ein "Matching") zwischen den Logik-Klassen und den GUI-Klassen zu finden...

@Marco13:
Vor dem Problem stehe ich jedes Mal, das Programm fängt klein und übersichtlich an und wächst dann, weil man sich immer noch was einfallen lässt. Da ich gerade im Leserausch bin, hast du oder jemand eine gute Buchempfehlung. Klar kann ich bei Amazon 'Java' als Suchbegriff eingeben, aber ob die Bücher etwas Gutes sind, steht in den Sternen

Gruß, Hummel
 

Civilazi

Bekanntes Mitglied
Klar kann ich bei Amazon 'Java' als Suchbegriff eingeben, aber ob die Bücher etwas Gutes sind, steht in den Sternen

Exakt, nämlich wie sie bewertet worden sind. :lol:
Na ja egal, was für ein Buch suchst du denn? Gegen das oben genannte Problem hilft es auch, die Software vorher zu planen, das ist immer gut und es wird auch nicht unübersichtlich bzw. wenn doch, dann hast du schlecht geplant :)
 

Hummel

Mitglied
Oh, ich sollte noch einaml genau lesen was ich geschrieben habe bevor ich auf absenden klicke! :oops:

Also Objektorientierung ist für mich kein Problem (kenne ich vieles von C++), die Syntax geht auch, aber so die exakte Umsetzung, sprich 'wie baue ich mein Programm nach den Normen auf' da fehlt mir noch ein bißchen der Plan. Ich dachte jetzt an ein Schriftstück in Richtung Software Engineering in Java, aber ich habe keins für diese Sprache gefunden, das gut ist (z.B. mangelnde Übersetzung oder unzureichender Inhalt).
Ich bin der englischen Sprache zwar mächtig (zumind. verstehe ich 85 % aller Sachen), aber ich bin faul was das anbelangt und man muss sich die Sache ja nicht unnötig schwer machen.
Irgendwo muss es doch Regeln (niedergeschrieben) geben. Oder denke ich z kompliziert. Ich meine für C++ gibt es solche Bücher doch auch! Und in Deutsch, wohlbemerkt.

Gruß, Hummel
 

Marco13

Top Contributor
Ein bißchen sehe ich da jetzt einen Widerspruch ... oder eine Unklarheit. Wenn es um sprachspezifische Sachen geht, dann sollten die mit einigen Online-Büchern, Tutorials und Codeschnipseln (die es für Java mit Sicherheit in erschöpfenderer Menge gibt als für jede andere Spache) eigentlich klären lassen.
Wenn es um "allgemeine", "strukturierende", an Software-Engineering angelehnte Fragen geht, dann sollten die Ideen dahinter eigentlich weitgehend sprachunabhängig (d.h. leicht von C++ auf Java übertragbar) sein...
 

Atze

Top Contributor
eigentlich gibt es für programme auch keine "normen", denn software ist ja individuell, teils kreativ und teils den kundenwünschen angepasst. was du suchst sind wahrscheinlich design pattern wie zb. das mvc. das teilt die softwareeinheiten in deren aufgaben. dies ist aber wie ein kollege schon sagte nicht sprachspezifisch, lediglich einige java frameworks erleichtern diese arbeit, bspw. jsp, struts etc. wenn du solche bücher suchst, sind buchschmieden wie addison-wesley und vielleicht auch galileo-computing gut in einsteigerlektüre.

MVC:
Model View Controller ? Wikipedia
 

Hummel

Mitglied
@Marco13: Ich versuche halt mein Wissen über Java zu Erweitern, ich möchte von C++ weg (finde ich furchtbar, aber bringt das Studium mit...). Dann werde ich mein C++ Buch trotzdem noch mal hervorkramen, wo da ein Kapitel zu drin steht.

Das Problem ist es geibt so viele schöne Sachen und Google ist auch eine wunderbare Erfindung, aber man muss das Wort (den Fachausdruck) kennen, sonst ist ganz schnell der Frust sehr groß. Und ich kenne die Wörter leider nicht. Jetzt sind mir ein paar Begriffe zu Ohren gekommen, daran kann ich anknüpfen.

@Atze: Das klingt schon mal gut, dann liege ich mit meiner Buchauswahl nicht ganz so verkehrt. Die Lektüre "Java ist auch eine Insel" o.ä. kenne ich schon, und die Addison - Wesley Bücher sind mir (dem Namen nach) bekannt. Dann werde ich da wohl mal ansetzen.

Ich Danke euch ersteinmal für die Ratschläge. :toll:

Ach ja, der Ansatz von oben (quasi mein erstes Beispiel) ist vom Stil nach in Ordnung, oder? Ich schreibe meine Programme mitlerweile schön selbst in Eclipse und verzichte auf die anfänglichen Spielereien mit NetBeans. Deshalb habe ich mir das so angewöhnt. Oder habe ich eine Marotte übernommen. NetBeans macht häufiger mal Müll!

Danke nochmal und schönen Abend noch,
Gruß

Hummel
 

Marco13

Top Contributor
Diese Trennung von "initComponents" und "layoutComponents" kann Sinn machen. Wenn man aber z.B. ein paar Labels mit Infos zwischendrin einstreuen will, funktioniert das nurnoch, wenn man ALLE labels eindeutig benennt und als Fields / Membervariablen deklariert - und das wäre dann IMHO unschön.
 

Hummel

Mitglied
Kommt dann halt auf das Gesamtkonzept des Projekts/Programms an.

Ich machs Beste draus und werde mich mal wieder hinter die Bücher klemmen.

Danke dir,

Hummel
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B JGraphX und layout Allgemeine Java-Themen 2
L log4j layout Allgemeine Java-Themen 3
H Keyboard Layout Wechsel Allgemeine Java-Themen 2
A automatisches layout für graphen Allgemeine Java-Themen 5
MQue Buttongröße Layout Allgemeine Java-Themen 4
Developer_X Box-Layout??? Allgemeine Java-Themen 3
S Vermutlich Layout Problem Allgemeine Java-Themen 2
S Layout Problem Allgemeine Java-Themen 5
C Eigenen Layout Manager schreiben Allgemeine Java-Themen 7
H Keyboard-Layout verändern Allgemeine Java-Themen 4
P Image auf einem Panel mit null-Layout Allgemeine Java-Themen 8
S Layout bei Frames Allgemeine Java-Themen 2
W welches layout? Allgemeine Java-Themen 3
A Hartgecodete Daten auslagern Allgemeine Java-Themen 4
F Code auslagern Allgemeine Java-Themen 5
M Methoden Operation auslagern und "nebenbei" laufen lassen Allgemeine Java-Themen 3
M Redundante Zustandsprüfungen auslagern Allgemeine Java-Themen 8
M Methoden Methode Auslagern Allgemeine Java-Themen 6
L Arbeitsspeicher auf Festplatte auslagern Allgemeine Java-Themen 36
P Code in Methode auslagern möglich? Allgemeine Java-Themen 9
C KeyListener auslagern - Wie? Allgemeine Java-Themen 3
C Informationen in eine Datei auslagern Allgemeine Java-Themen 19
N Wie Listenabgleich auf zwei CPU Cores auslagern? Allgemeine Java-Themen 6
B Daten effizient ein- und auslagern Allgemeine Java-Themen 7
A Wie am besten Daten auslagern um heap zu schonen Allgemeine Java-Themen 4
G Frage zu Programmierstil: Auslagern von Kostanten Allgemeine Java-Themen 8
byte Annotations: Arrays auslagern Allgemeine Java-Themen 2
DeeDee0815 Resourcen in JARs auslagern Allgemeine Java-Themen 4
G SQL Anfragen auslagern+Transaktionen Allgemeine Java-Themen 17
H Tabellenmethode auslagern Allgemeine Java-Themen 2
N Methoden in eigene Dateien auslagern? Allgemeine Java-Themen 10
S grafische Oberfläche-> auslagern innerer klassen Allgemeine Java-Themen 5
K AUf den USB Stick auslagern Allgemeine Java-Themen 15
C RAM Speicher in Datei auslagern (Java Swapping) Allgemeine Java-Themen 4
H Methoden in andere Files auslagern Allgemeine Java-Themen 6
A menüeinträge im Java Menü auslagern Allgemeine Java-Themen 9
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
8u3631984 Strukturiertes Logging : Jedes Feld in eine seperate Zeile - aber wie ? Allgemeine Java-Themen 2
berserkerdq2 Wenn ich bei Intelij javafx mit maven importieren will, muss ich das in die pom.xml reintun, aber warum noch in module-info.java? Allgemeine Java-Themen 3
N JAVA-Code mit Grafikfenster zeichnet in Windows, aber nicht Mac. Allgemeine Java-Themen 4
M Klasse durch Klassen Aufteilung verbessern, aber wo? Allgemeine Java-Themen 1
Thallius Zeitzone zu einem LocalDate hinzufügen aber ohne es zu ändern... Allgemeine Java-Themen 2
L Kursverlauf vorhersagen mit Deeplearning4j, aber komischer Knick am Anfang der Vorhersage Allgemeine Java-Themen 3
M Test geht auf Travis und mit Github Action schief aber nicht lokal Allgemeine Java-Themen 3
Zrebna FileUtils.cleanDirectory() - aber einen sub-Ordner "verschonen" Allgemeine Java-Themen 1
S Java.exe exestiert, aber irgendwie auch nicht Allgemeine Java-Themen 11
X Collections Gibt es eine Klasse welche die Vorteile von List und HashMap vereint, aber konstante Laufzeit (O(1)) hat in Java? Allgemeine Java-Themen 4
L Korrektur nach der Berechnung vornehmen, aber wie? Allgemeine Java-Themen 11
S Validation Null aber nicht Blank und muss Email sein Allgemeine Java-Themen 22
P Am Application Server - Selbe files aber trotzdem CNF Allgemeine Java-Themen 2
P Element einer Liste wurde hinzugefügt, aber es gibt keinen Zugriff Allgemeine Java-Themen 2
F Input/Output NullPointerException, aber wieso? [Apache POI] Allgemeine Java-Themen 11
T PDF-Generierung (itext) - läuft unter Eclipse, bei har aber leere Seite Allgemeine Java-Themen 39
K Erste Schritte Start einer JAR Datei 2 Wege aber einmal nicht die volle Funktionlität Allgemeine Java-Themen 20
E Exceptions abfangen und dann Programm stoppen - aber wie? Allgemeine Java-Themen 2
T Google OAuth 2.0 aber wie Allgemeine Java-Themen 16
B Web-Anwendung funktioniert mit Java 1.8, aber nicht mit Java 1.7 (auf Client) Allgemeine Java-Themen 5
K Programmfehler aber warum? Allgemeine Java-Themen 5
V Semikolonfehler,aber nicht lösbar.. Allgemeine Java-Themen 6
M String shuffeln, Anfang und Ende aber bleiben gleich Allgemeine Java-Themen 15
S Command funktioniert in Kommandzeile aber nicht mit ProcessBuilder bzw. Runtime.exec auf MAC Allgemeine Java-Themen 3
B NullPointerException - Aber kein Fehler im Code Allgemeine Java-Themen 4
T .dll in java benutzen aber wie? Allgemeine Java-Themen 4
B Input/Output version.cfg konnte nicht im Klassenpfad gefunden werden, ist aber dort. Allgemeine Java-Themen 0
L Prog läuft in der IDE, hängt sich aber am Mac auf Allgemeine Java-Themen 0
E Sms empfangen aber wie? Allgemeine Java-Themen 6
R Software ausliefern - Aber Wie? Allgemeine Java-Themen 10
D Input/Output Datei wird lokal aber nicht vom Webserver ausgelesen... Allgemeine Java-Themen 2
J Compiler-Fehler Compiliert unter Eclipse aber nicht mit javac Allgemeine Java-Themen 0
M Code läuft unter windows aber nicht unter Linux Allgemeine Java-Themen 6
B Threads Barrier mit wait()/notify() aber nicht alle Prozesse terminieren Allgemeine Java-Themen 2
S XML lesen, verarbeiten, speichern klappt in Eclipse, aber nicht in der JAR Allgemeine Java-Themen 4
R xx.xx.xx <-nur /w & /. aber !2x '.' hintereinander Allgemeine Java-Themen 6
P wieso kann ich auf bluej exportieren aber auf eclipse nicht? Allgemeine Java-Themen 2
H Scanner soll einen Inputredirect einlesen, liest aber nicht jedes Wort ein. Allgemeine Java-Themen 3
A NoSuchMethod aber Methode ist da! Allgemeine Java-Themen 4
F Objekt einer Datei verschieben, aber Verzeichnispfad fehlt Allgemeine Java-Themen 6
T Jar File läuft unter Windows aber nicht unter linux Allgemeine Java-Themen 10
S java.util.ConcurrentModificationException - aber nur ein Thread Allgemeine Java-Themen 3
nrg Auszulagernder Part, der aber variable Methode/Klasse aufruft Allgemeine Java-Themen 7
F Verschlüsseln, aber welcher Algo Allgemeine Java-Themen 29
H Threads Thread stirbt aber Objekte in ihm leben weiter?! Allgemeine Java-Themen 9
D Internet Abfrage aber mit Warteschleife Allgemeine Java-Themen 6
T Objekt 2x deserialisieren, aber nur 1x im Heap haben? Allgemeine Java-Themen 4
K iText, HTML Einrückung im Document, aber nicht im Paragraph Allgemeine Java-Themen 3
F NullPointerException aber warum ? Allgemeine Java-Themen 9
S exec( "cmd /c") aber Konsole soll offen bleiben Allgemeine Java-Themen 9
K event dispatch thread fehler. Compiler meckert nicht aber der Interpreter? Warum?? Allgemeine Java-Themen 11
J Funktioniert aber nicht gut erweiterbar Allgemeine Java-Themen 3
M net4j in Eclipse, installiert aber nicht im Build-path Allgemeine Java-Themen 4
C Überwachen der Zwischenablage, aber wie? Allgemeine Java-Themen 10
J Process beenden ...aber wie ? Allgemeine Java-Themen 19
D Scanner leer aber bufferedReader nicht?! Allgemeine Java-Themen 2
B Exception wird geworfen, ich darf sie aber nicht abfangen. Allgemeine Java-Themen 10
J Comparable aber nicht immer Allgemeine Java-Themen 15
T JConsole: Klassen werden geladen aber nicht wieder entladen Allgemeine Java-Themen 3
T Datenbank lässt sich un Entwicklungsumgebung öffnen, aus .jar aber nicht Allgemeine Java-Themen 9
Z Boolean Abfrage gibt kein Boolean zurück, aber warum? Allgemeine Java-Themen 6
FoolMoon Datei zeilenweise einlesen, aber nicht die erste Zeile! Allgemeine Java-Themen 3
D Ich möchte meine *.java Dateien in Applets "umschreiben. Aber wie? Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben