GUI Design ohne GUIDesigner

Nookie

Mitglied
Hallo zusammen

Ich bin nun schon eine weile in der Java-Welt und wage mich langsam an GUI's.
Es gibt ja für Eclipse und Netbeans solche netten GUI Designer, ich würde aber gerne ohne solche GUI's designen. Oder ist so was ein ding der Unmöglichkeit? ;)

Als bsp soll mal diese GUI dienen:
screen.png

Was ist nun "best practies" ein solches GUI zu bauen?
Auf der ersten "Linie" wären ja mal Ein JLabel, JTextField und zwei JButtons.
Diese in ein pane und dem pane ein FlowLayout zuweisen welches dann auf das JFrame kommt?
Aber dann wie weiter? zB Wie definiere ich die breite eines JTextFields?
Und wie sage ich dem nächsten pane das es nicht das erste überschreiben soll?

Grüsse
 

Thallius

Top Contributor
Das gezeigt GUI ist schon eine ziemliche Herausforderung. Da wirst Du am Anfang dran verzweifeln. Ich selber arbeite am liebsten mit dem BoxLayout und zerlege meine UI in immer kleinere Panel-Teile bis nur noch ein Element überbleibt.

An Deinem Beispiel hätte ich zunächst ein JPanel das über das gesammte Frame geht und Zeilenorientiert ist (PAGE_AXIS). In dieses Panel kommt dann ein Box.Filler für den Abstand zum oberen Rand. Dann kommt ein JPanel für die Searchbar mit den zwei Buttens, dann kommt wieder ein Filler für den Abstand zur nächsten Box, dann ein JPanel für das Listview (Oder was auch immer das da ist), dann wieder ein Filler, dann ein JPanel für das Textview, ein Filler, ein Jpanel für die Buttons unten und ein Filler für den Abstand zum unteren Rand.

Jetzt habe ich mein UI in 4 kleine Panels unterteilt. Das erste Panel bekommt nun ein BoxLayout mit Spaltenformat (LINE_AXIS). Dort setze ich dann die Elemente rein. Ersst wieder ein Filler für den linken Rand, dann das Label für "Highlight", ein Filler für den ABstand, dann das Textview, Filler, Button, Filler, Button.

Gruß

Claus
 

Gucky

Top Contributor
Ich würde dir zum GroupLayout raten. Das ist mein Lieblingslayout aber ohne GUI Designer ist es sehr kompliziert. Aber dann könntest du das obige GUI nachbauen, ohne verschachtelung von JPanels.

Warum möchtest du diese Tools denn nicht benutzen? Schließlich gibt es sie. :)
 

dzim

Top Contributor
In JavaFX wäre eine Variante:
VBox (root, spacing von 5)
- HBox (searchbar, spacing von 5)
-- Label, Text (vgrow=ALWAYS), Button, Button
- Da ich nicht weiss, was auf der grossen Fläche stehen soll: AnchorPane, ... (aber mit vgrow=ALWAYS)
- TextArea (minHeight/maxHeight setzen)
- HBox (untere Leiste, spacing von... rate mal)
-- Label, ComboBox, Button, Spinner, Label (ohne Inhalt, hgrow=ALWAYS), Button Button

Nicht so fancy...
 

Harry Kane

Top Contributor
Ich verwende seit Jahren praktisch nur MigLayout.
Dieser Code:
Java:
public class MigNestedPanel {
    
    public static void main(String[] args){
        JFrame frame = new JFrame("Nested components");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = new JPanel(new MigLayout("fill","[]","[][grow][grow][]"));
        panel.add(new JLabel("Highlight:"), "sg label, split, span");
        panel.add(new JTextField(10), "growx");
        panel.add(new JButton("..."));
        panel.add(new JButton("Show next"), "wrap");
        panel.add(new JScrollPane(new JTextArea()),"split, span, wrap, grow");
        panel.add(new JScrollPane(new JTextArea()),"split, span, wrap, grow");
        panel.add(new JLabel("Volume:"), "sg label, split, span");
        panel.add(new JComboBox(new String[]{"A:\\", "C:\\", "D:\\"}));
        panel.add(new JButton("Refresh"));
        panel.add(new JLabel("Zoom"));
        panel.add(new JSpinner());
        panel.add(new JButton("Export..."), "gap push");
        panel.add(new JButton("Quit"));
        frame.setContentPane(panel);
        frame.pack();
        frame.setVisible(true);
    }
    
}
ergibt nach vergrößern des JFrames dieses Bild:
MigLayout.png
 

dzim

Top Contributor
BTW: Ich habe UIs erst mit dem Designer erstellen lassen und dann begonnen, sie wirklich zu verstehen...
 

Ruzmanz

Top Contributor
Was ist nun "best practies" ein solches GUI zu bauen?

Swing hat einen großen Verbereitungsgrad und deshalb gibt es viele Bibliotheken und spezielle Elemente. JavaFX ist zwar nicht so weit entwickelt, aber im Großen und Ganzen deutlich überlegen. Dort hast du die Möglichkeit deine GUI-Edinition in (F)XML zu beschreiben, was mMn wesentlich lesbarer und einfacher ist, als in Swing. Für Swing gibt es auch diverse Libraries, welche diese Funktionalität bieten, aber der Verbreitungsgrad ist nicht so hoch. Der UIManager in Swing ist sehr speziell und nicht so einfach zu handhaben, wie z.B. CSS ...

Zu deiner Eigentlichen Frage. Sofern du ein bisschen mit HTML vertraut bist, kannst du dich an diese Vorgehensweise orientieren:

1. Schritt: Der Frame hat alle Elemente auf einem Panel.

HTML:
<Frame>
  <Panel>
  </Panel>
</Frame>

2. Schritt: Die Elemente auf dem Panel sind vertikal angeordnet:
(Top, GraueTextArea, WeißeTextArea und Bottom)

HTML:
<Frame>
  <Panel Layout="Vertikal">
    <Panel id="Top"></Panel>
    <Panel id="GraueTextArea"></Panel>
    <Panel id="WeißeTextArea "></Panel>
    <Panel id="Bottom"></Panel>
  </Panel>
</Frame>

... Dann kannst du die einzelnen Panels immer detailierer definieren. Oft ist ein Verschachteln nicht nötig. In diesem Fall bietet sich auch ein Gridbag an oder hier im Forum hat jemand mal das TOnion-Layout vorgestellt. Das könnte auch ganz gut passen.

PS: An den Antworten sieht man schon, dass es nicht "die Lösung" gibt. Kommt sehr oft auch auf die Rahmenbedingungen an. Bei 2 Masken mit vielen Änderungen, würde ich immer einen Editor nehmen.
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Ich bin zwar nicht Zuhause, aber ich liebe es gui's von Hand zu programmieren (haltet mich ruhig für bescheuert), ich sehe auf Anhieb das BorderLayout, und mehrere panel mit verschiedenen Komponenten, wenn ich nachher dazu komm,e könnte ich dir nen kleines bsp. Posten im welchem du erkennen kannst wie man sowas einteilen und untergliedern kann :)
 

kaoZ

Top Contributor
Falls es dich noch interessieren sollte :

Ich hab es mal einfach unterteilt,

Angenommen du hast ein JFrame mit standardmäßigem Borderlayout:

Dann könnte man dein Layout einfach in diesem Gliedern :

JMenuBar und im Headbereich einfach ein panel mit Flowlayout und deinen Komponenten :


Im Center bereich des JFrames einfach eine JTextArea / oder einen JTree, je nachdem was du darstellen willst :



und im Bottom bereich des BorderLayouts ein JPanel welches wiederrum in 2 JPanel unterteilt ist, und ggf ein Box Oder GridBagLayout erhält:



nur um eine weitere Möglichkeit aufzuzeigen, die komponenten sind hier auch relativ offensichtlich , Buttons, JTextField, JTextArea, Combobox usw. usw. , am besten du beginnst und tastest dich Stück für Stück heran indem du ersmtal versuchst die einzelnen JPanel zu definieren und zum schluss alles zu einem fertigen Layout per Composite Pattern zusammenzusetzen.

Quasi ala Divide and Conquer.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Button / Design Ideen AWT, Swing, JavaFX & SWT 2
M JavaFX kann man da noch was am code vereinfachen design technisch sieht nicht richtig aus... AWT, Swing, JavaFX & SWT 15
R Swing Design des oberen Balkens in JFrame AWT, Swing, JavaFX & SWT 2
L JavaFX GUI Design AWT, Swing, JavaFX & SWT 6
W WindowBuilder / Design-Vorschau schneidet den Rand ab AWT, Swing, JavaFX & SWT 0
E Prinzip: wie man Ereignisse in einer GUI verarbeit. Frage zum Design? AWT, Swing, JavaFX & SWT 10
SchmidiMC Swing Vorschläge für ein Design AWT, Swing, JavaFX & SWT 5
das_leon AWT Button Design ändern AWT, Swing, JavaFX & SWT 5
it_is_all Swing Button, ComboBox,... -- Unterschied: NetBeans Design <-> Ausführung AWT, Swing, JavaFX & SWT 2
F Design-Anzeige im Windowbuilder AWT, Swing, JavaFX & SWT 3
K GridBagLayout mit reponsive Design AWT, Swing, JavaFX & SWT 2
B Design Umsetzung AWT, Swing, JavaFX & SWT 1
M Swing JComboBox eigenes Design AWT, Swing, JavaFX & SWT 3
L LookAndFeel Eigenes Design für die Applikation AWT, Swing, JavaFX & SWT 4
A JavaFX Hilfe beim Design eines Quiz AWT, Swing, JavaFX & SWT 2
T JavaFX "DefaultButton"-Design ändern AWT, Swing, JavaFX & SWT 8
T JavaFX Flexible Layouts dynamisch erstellen / Design-Inspirationen AWT, Swing, JavaFX & SWT 8
T Programm im METRO Design? AWT, Swing, JavaFX & SWT 1
D GWT Design AWT, Swing, JavaFX & SWT 0
B Custom JTabbedPane-Tab-Design AWT, Swing, JavaFX & SWT 2
U WindowBuilder "Design-Tab" AWT, Swing, JavaFX & SWT 2
P LayoutManager Design meines Projekts (hätte wer zeit?) AWT, Swing, JavaFX & SWT 9
G Eclipse: Design Tab wird nicht mehr angezeigt AWT, Swing, JavaFX & SWT 4
M Design in Java umsetzen AWT, Swing, JavaFX & SWT 3
Tsuna JButtons in Apple-Design AWT, Swing, JavaFX & SWT 4
ARadauer Wenig Material zum Thema: Design, Layout, Usability von Swing Anwendungen AWT, Swing, JavaFX & SWT 11
J LayoutManager Welchen Layout/Design-Manager? AWT, Swing, JavaFX & SWT 4
W LayoutManager Clientfenster ins Design einbinden AWT, Swing, JavaFX & SWT 13
B LayoutManager GUI-Design: eventuelle Alternativen zum Verschachteln + Ansprechen von JPanel()? AWT, Swing, JavaFX & SWT 2
F JSlider Design ändern AWT, Swing, JavaFX & SWT 6
D Repaint Frage, Design Frage AWT, Swing, JavaFX & SWT 2
G Grundsatzfrage GUI-Design AWT, Swing, JavaFX & SWT 6
R Zugriff auf Model im MVC-Design aus SwingWorker heraus AWT, Swing, JavaFX & SWT 3
tuttle64 Design für mehrere Sprachen in Swing AWT, Swing, JavaFX & SWT 15
L Eigene Design Oberfläche erstellen AWT, Swing, JavaFX & SWT 3
M Special design of Swing components AWT, Swing, JavaFX & SWT 14
KrokoDiehl Swing Design-Frage: eigenes Line-Wrapping AWT, Swing, JavaFX & SWT 5
T Design mit vielen Feldern AWT, Swing, JavaFX & SWT 2
D Design - View & Controller AWT, Swing, JavaFX & SWT 2
eskimo328 Moderne Swing GUI mit Web ähnlichem Design AWT, Swing, JavaFX & SWT 7
M Nochmal Swing, MVC und generelles Design AWT, Swing, JavaFX & SWT 2
S JTree Design Problem AWT, Swing, JavaFX & SWT 5
S Design problem AWT, Swing, JavaFX & SWT 2
K Design von verschiedenen Rechnern AWT, Swing, JavaFX & SWT 13
A Design Problem bei verschiedenen Oberflächen AWT, Swing, JavaFX & SWT 3
Steev Standard Design bei JFrame und AWT AWT, Swing, JavaFX & SWT 7
M Design von Elemente? AWT, Swing, JavaFX & SWT 16
T Allgemeine Frage - innovatives GUI Design AWT, Swing, JavaFX & SWT 6
P Swing-Komponenten - Standart-Windows Design? AWT, Swing, JavaFX & SWT 4
B Swing - Design Patterns AWT, Swing, JavaFX & SWT 3
S "Zerstörtes" gbl-Layout (Design) AWT, Swing, JavaFX & SWT 10
D professionelles GUI-Design als Skeleton Pro AWT, Swing, JavaFX & SWT 2
A Applikation mit Netbeans-Design AWT, Swing, JavaFX & SWT 4
R JDialog hat seltsames Design AWT, Swing, JavaFX & SWT 6
L Design-Probleme (Swing-Anfänger) AWT, Swing, JavaFX & SWT 6
M Look&Feel - Layout - GUI - Design - SAP LnF :) AWT, Swing, JavaFX & SWT 12
M Frage bzgl. Formular-Design. AWT, Swing, JavaFX & SWT 2
R Programm an Design anpassen. AWT, Swing, JavaFX & SWT 4
Juelin starten maven javafx programm ohne netbeans AWT, Swing, JavaFX & SWT 38
M KeyEvent ohne Fokus konsumieren AWT, Swing, JavaFX & SWT 1
Georges456 NetBeans am Mac leider ohne FXML AWT, Swing, JavaFX & SWT 17
A JOptionPane OK ohne Eingabe abfangen AWT, Swing, JavaFX & SWT 10
A JavaFX exportierte Jar ohne beim starten die Libs hinzufügen? AWT, Swing, JavaFX & SWT 2
N setOnKeyPressed ohne Scene AWT, Swing, JavaFX & SWT 2
M mvvm umsetzen ohne fxml AWT, Swing, JavaFX & SWT 0
L JavaFX OpenJFX16 App ohne Gradle and Maven? AWT, Swing, JavaFX & SWT 2
izoards Jar startet jedoch ohne Hintergrundfunktion AWT, Swing, JavaFX & SWT 25
L FX-Projekt: fast leere Fensterausgabe ohne Fehlermeldung AWT, Swing, JavaFX & SWT 6
H Timer ohne alles lahmzulegen? AWT, Swing, JavaFX & SWT 2
Z Random Butten erstellen ohne Container AWT, Swing, JavaFX & SWT 15
VPChief Ein JFrame ohne setUndecorated(true); nicht verschiebbar machen. AWT, Swing, JavaFX & SWT 6
Fiedlerdan Vergleich vieler Strings ohne ellenlange Argumentierten AWT, Swing, JavaFX & SWT 7
L Daten bearbeiten ohne GUI zu blockieren - daten haltung/zurück geben AWT, Swing, JavaFX & SWT 15
D Swing Anwendung ohne JPanel erstellen AWT, Swing, JavaFX & SWT 1
N Aktualisierung des Fensters AWT Java ohne Ruckeln AWT, Swing, JavaFX & SWT 3
T JavaFX Dialog schließt ohne dass es schließen soll AWT, Swing, JavaFX & SWT 1
K JFreeChart nicht ohne BarChartDemo startklar? AWT, Swing, JavaFX & SWT 5
GenerationLost JavaFX FileChooser speichern ohne Zieldatei? AWT, Swing, JavaFX & SWT 12
Y Objekte grafisch darstellen ohne GMF - Composite auf Canvas? AWT, Swing, JavaFX & SWT 2
K KeyListener ohne JFrame AWT, Swing, JavaFX & SWT 9
T Custom Window ohne Swing / AWT / FX..?! AWT, Swing, JavaFX & SWT 1
S Zeichen ohne paint-Methode AWT, Swing, JavaFX & SWT 2
M Menü ohne Menübar umsetzen[SWT] AWT, Swing, JavaFX & SWT 8
kilopack15 Buttons ohne Funktion AWT, Swing, JavaFX & SWT 2
S 2D-Grafik User-BufferedImage rotieren im Zentrum und ohne "anpassung" AWT, Swing, JavaFX & SWT 2
Ghostman1711 Java JFormattedTextfield MaskFormatter ohne Leerzeichen AWT, Swing, JavaFX & SWT 3
Z Swing Frame wird geöffnet, aber ist ohne Inhalt AWT, Swing, JavaFX & SWT 0
C Jframe ohne Rahmen AWT, Swing, JavaFX & SWT 3
R JavaFX Wert einer ChoiceBox bekommen ohne Lambdas AWT, Swing, JavaFX & SWT 11
Fishmeaker Shortcuts ohne ALT zuweisen AWT, Swing, JavaFX & SWT 1
O JTable ohne Rahmen printen AWT, Swing, JavaFX & SWT 3
M Mouse Click Event ohne ein JComponent Objekt AWT, Swing, JavaFX & SWT 3
W Swing JLabel jede Sekunde aktualisieren, ohne Timer zu benutzen AWT, Swing, JavaFX & SWT 4
M JavaFX Ein Bild ohne Rahmen fällt runter? AWT, Swing, JavaFX & SWT 2
M Zeichnen ohne vorherige Linien zu löschen AWT, Swing, JavaFX & SWT 2
F Swing JPanels übereinander ohne Mananger AWT, Swing, JavaFX & SWT 1
X Swing Ein neues Fenster öffen aber ohne ein extra Prozess zu starten AWT, Swing, JavaFX & SWT 1
C JTextfield ohne Enter feuern AWT, Swing, JavaFX & SWT 8
F Swing String[] in JTextArea ausgeben. Jeder Eintrag in neue Zeile, aber ohne "\n"- Geht das? AWT, Swing, JavaFX & SWT 3
S Paint Methode ohne implements JPanel AWT, Swing, JavaFX & SWT 1

Ähnliche Java Themen

Neue Themen


Oben