Swing Ist das hier möglich?

Status
Nicht offen für weitere Antworten.

Hutmacher

Bekanntes Mitglied
Ist das hier möglich, ohne das null-Layout oder den GridBag-Layout-Manager zu benutzen?
Diese GUI hatte ich für ein Projekt von mir im Kopf, habe sie hier einmal mit Visual Studio erstellt. Es geht mir hierbei nicht um die einzelnen Komponenten, sondern einen großen Deknanstoß, WIE man hier die Layoutmanager verschachteln müsste.
So soll das Ganze aussehen:
x8K77681.png
 

jason

Mitglied
Vielleicht so:

JFrame Layout: BorderLayout

a: BorderLayout.SOUTH
b: alle Komponenten auf ein JPanel mit FlowLayout (oder BorderLayout (Textfeld WEST, Button1 CENTER, Button2 EAST). JPanel BorderLayout.CENTER
c und c1: auf ein JPanel mit BorderLayout (WEST (GroupBox1) und EAST (GroupBox2)). JPanel auf JFrame (BorderLayout.NORTH)

unbenanntfr7v.jpg


Ich habe also immer einzelne Teile zu einem zusammengefasst, die in einer Spalte sind oder eine andere Gemeinsamkeit haben/zusammen gehören.

MfG
 
Zuletzt bearbeitet:

diggaa1984

Top Contributor
ja also wenns unbedingt ohne gridbag sein soll, dann wäre das auch mein erster versuch mit dem borderlayout .. genau wie es jason beschrieben hat
 

Hutmacher

Bekanntes Mitglied
Okay, danke.
Aber wie ist das mit der GroupBox1? Das ist ja auch ein JPanel, aber wie ordne ich das an?
GridLayout geht nicht, FlowLayout wüsst ich auch nicht wie. BorderLayout geht ja auch nicht.
 

Ebenius

Top Contributor
Ohne GridBagLayout? Dann würde ich ein BorderLayout nehmen, den mittleren Bereich mit dem Label füllen und den südlichen mit einem Panel das ein GridLayout hat und zwei Buttons trägt.

Ebenius
 

diggaa1984

Top Contributor
Ist dir das GridbagLayout zu kompliziert oder warum möchtest das nicht nutzen, sie es als chance dich da rein zu arbeiten :D
 

Hutmacher

Bekanntes Mitglied
Ist dir das GridbagLayout zu kompliziert oder warum möchtest das nicht nutzen, sie es als chance dich da rein zu arbeiten :D
Eigentlich wollte ich erst einmal etwas Übung mit den anderen Layouts kriegen^^
Und außerdem habe ich bisher nur Schlechts über das GridBagLayout gehört :D


Habe versucht, das jetzt einmal umzusetzen.
Das Ergebnis ist aber irgendwie ernüchternd und nicht das, was ich mir vorgestellt habe:
K1u03679.png

Hierbei ist oben links im JPanel viel zu viel Platz.
Außerdem ist von der Mitte nach unten viel zu wenig Abstand zwischen den JPanels und am Rand. Habe versucht, das mit setH/Vgaps etc. auszubügeln, aber ohne Erfolg.
Außerdem sieht man die JProgressBar kaum, auch sie hat zu wenig Abstand.
Abhilfe? =/

Java:
public class GUI extends JFrame
{
    private Server server;
    private Image icon;
    
    //Components
    private JButton startServer;
    private JButton stopServer;
    private JLabel serverState;
    private JScrollPane boundClients;
    private JButton refreshList;
    private JTextField picturePath;
    private JButton selectPicturePath;
    private JButton changeDesktop;
    private JProgressBar progress;
    
    //Listener
    private ButtonListener buttonListener = new ButtonListener(this);
    
    public GUI()
    {
        super("RemoteDesktopChange");
        
        //Icon settings
        URL res = this.getClass().getResource("icon.png");
        Image image = Toolkit.getDefaultToolkit().getImage(res);
        setIconImage(image);
        
        //Component initializing
        startServer = new JButton("Start server");
        startServer.addActionListener(buttonListener);
 
        stopServer = new JButton("Stop server");
        stopServer.addActionListener(buttonListener);
        
        serverState = new JLabel("Server state: offline");
        serverState.setHorizontalAlignment(SwingConstants.CENTER);
        
        String[] listContent = {"Hermann-PC", "Martin-PC", "Slughorn-PC", "Röhrenvogelkanone-PC"};
        boundClients = new JScrollPane(new JList(listContent));
        
        
        refreshList = new JButton("Refresh");
        refreshList.addActionListener(buttonListener);
        
        picturePath = new JTextField("Select a file");
        
        selectPicturePath = new JButton("Durchsuchen");
        selectPicturePath.addActionListener(buttonListener);
        
        changeDesktop = new JButton("Change!");
        changeDesktop.addActionListener(buttonListener);
        
        progress = new JProgressBar();
        
        //Frame settings
        getContentPane().add(createMainPanel()); //Draws the panel containing all components
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationByPlatform(true);
        setSize(300, 300);
        pack();
        setResizable(false);
        setVisible(true);
    }
    
    /**
     * Sets all sub-panels with their respective
     * components and compounds them into one.
     */
    private JPanel createMainPanel()
    {

        JPanel mainPanel = new JPanel(new BorderLayout());
        
        BorderLayout bl = new BorderLayout();
        bl.setVgap(10);
        JPanel northPanel = new JPanel(bl); 
        
        //NorthPanel
        JPanel serverPanel = new JPanel(new BorderLayout());
        JPanel innerLabelPanel = new JPanel(new BorderLayout());
        innerLabelPanel.add(serverState, BorderLayout.CENTER);
        JPanel innerButtonPanel = new JPanel(); //FlowLayout
        innerButtonPanel.add(startServer);
        innerButtonPanel.add(stopServer);
        serverPanel.add(innerLabelPanel, BorderLayout.NORTH);
        serverPanel.add(innerButtonPanel, BorderLayout.SOUTH);
        serverPanel.setBorder(BorderFactory.createTitledBorder("Server"));
        
        JPanel clientSelectionPanel = new JPanel(new BorderLayout());
        clientSelectionPanel.add(boundClients, BorderLayout.NORTH);
        clientSelectionPanel.add(refreshList, BorderLayout.SOUTH);
        clientSelectionPanel.setBorder(BorderFactory.createTitledBorder("Bound clients"));
        
        northPanel.add(serverPanel, BorderLayout.WEST); 
        northPanel.add(clientSelectionPanel, BorderLayout.EAST); 
        
        
        //CenterPanel
        JPanel changeDesktopPanel = new JPanel(); //FlowLayout
        changeDesktopPanel.add(picturePath); //Left
        changeDesktopPanel.add(selectPicturePath); //Center
        changeDesktopPanel.add(changeDesktop); //Right
        changeDesktopPanel.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
        
        //Compound all
        mainPanel.add(northPanel, BorderLayout.NORTH);
        mainPanel.add(changeDesktopPanel, BorderLayout.CENTER);
        mainPanel.add(this.progress, BorderLayout.SOUTH);
        
        return mainPanel;
    }
}
(wenn ihr schlechten Codestil entdeckt, bitte melden :) )

PS: Das Ganze soll übrigens ein kleines Projekt in Gedenken an meinen Kumpel werden; immer, wenn ich mit Freunden bei ihm bin, ändern wir seinen Desktophintergrund in irgendwas Bescheuertes (z.B. Pokémon oder Gollum, Barbie, ...) und es ist immer wieder lustig. Jetzt wollte ich ein Programm schreiben, mit dem ich auch bequem von hier aus den Hintergrund ändern kann^^ Und damit ich das Ganze steuern kann, diese GUI.
 

-MacNuke-

Bekanntes Mitglied
Sofern du eine jar in deinem Projekt verkraftest, würde ich das MigLayout empfehlen. Da ist sowas total simpel.
 

Ebenius

Top Contributor
HGaps und VGaps sind schon richtig:
[java=73] JPanel mainPanel = new JPanel(new BorderLayout(6, 6));[/code]
Außerdem solltest Du beim BorderLayout möglichst immer den CENTER-Bereich bedecken, denn das ist der einzige der seine Größe in zwei Dimensionen anpassen kann:
[java=96]northPanel.add(clientSelectionPanel, BorderLayout.CENTER); [/code]
Hierbei ist oben links im JPanel viel zu viel Platz.
Den Satz verstehe ich nicht.

Ebenius
 

Hutmacher

Bekanntes Mitglied
@jason: Genau, das meinte ich, war halt nur schon so spät ^^

yyM41180.png

Diesen Abstand meine ich noch. Habe das umgesetzt, was du, Ebenius, mir empfohlen
hast. Der Abstand zwischen den Panels ist jetzt gut, totz- und dem bleibt ↑ dieser Abstand immer gleich.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
frager2345 Warum paintComponent hier und nicht paint AWT, Swing, JavaFX & SWT 2
B JavaFX Warum wird hier eine NullPointer-Exception geworfen? AWT, Swing, JavaFX & SWT 7
B JavaFX Wie programmiere ich hier einen "Weiter" Button? AWT, Swing, JavaFX & SWT 11
Developer_X Wie heißt das JComponent hier? AWT, Swing, JavaFX & SWT 2
A Welcher Layout Manager ist hier richtig? AWT, Swing, JavaFX & SWT 3
H <Synth> Alle die sich auskennen Bitte hier rein schaue AWT, Swing, JavaFX & SWT 2
T Methode getFont() - wie hier Schriftart/-größe beeinflussen? AWT, Swing, JavaFX & SWT 4
G Warum räumt der GC hier nicht auf? AWT, Swing, JavaFX & SWT 13
byte SWT: dispose() hier nötig? AWT, Swing, JavaFX & SWT 2
E Wie bekomme ich hier ein vertikale JScrollPane hin?? AWT, Swing, JavaFX & SWT 4
L Weiss nicht ob es hier her gehört - GUI ohne Konsole starten AWT, Swing, JavaFX & SWT 10
G JavaFX Wert aus DB lesen, wenn erfolgreich automatisch eine fxml laden, möglich? AWT, Swing, JavaFX & SWT 2
G JavaFX Scene ausdrucken nicht möglich, Seite leer AWT, Swing, JavaFX & SWT 5
ZH1896ZH MineSweeper Projekt: Testen nicht möglich AWT, Swing, JavaFX & SWT 6
L JavaFX WebView Erstellung nicht möglich AWT, Swing, JavaFX & SWT 4
G JavaFX - Während AudioRecording keine Text eingabe TextField möglich AWT, Swing, JavaFX & SWT 6
A Swing CardLayout - kein Wechsel möglich AWT, Swing, JavaFX & SWT 5
K JTable in extra Klasse, Zugriff in einer anderen klasse nicht möglich AWT, Swing, JavaFX & SWT 26
B Java FX FX installieren nicht möglich (Juno) AWT, Swing, JavaFX & SWT 4
C JavaFx TabelView - hintergrundfarbe möglich? AWT, Swing, JavaFX & SWT 1
A JFace Wizard: Ist es möglich eine Page zu löschen? AWT, Swing, JavaFX & SWT 2
P Swing Klick in Tabelle nicht möglich AWT, Swing, JavaFX & SWT 0
S 2D-Grafik JavaScript Visualisierung in Swing, ist das möglich? AWT, Swing, JavaFX & SWT 5
K Viele Textfield mit Hilfe eines MousListener leeren - möglich? AWT, Swing, JavaFX & SWT 8
M JFrame + JNA/aero modul - GUI Elemente so möglich? AWT, Swing, JavaFX & SWT 28
N Swing Netbeans 7.1 keine DesktopApplication mehr möglich ? AWT, Swing, JavaFX & SWT 15
S SWT Anzeigen einer lokalen HTML-Seite im Browser Widget über RAP nicht möglich AWT, Swing, JavaFX & SWT 3
A SWT DateTime Calendar - Nur ab Datum xy selektierbar möglich? AWT, Swing, JavaFX & SWT 2
M verschieben der Objekte in JPanel nur stückchenweise möglich AWT, Swing, JavaFX & SWT 14
M JFileChooser Abfangen des DateiTypen möglich?? AWT, Swing, JavaFX & SWT 5
T JFileChooser - "Öffnen-Button" aktivieren/deaktivieren möglich??? AWT, Swing, JavaFX & SWT 2
X Einem JFrame einen Dialog als Parent setzen. Möglich? AWT, Swing, JavaFX & SWT 4
bluerob Nach RowSorter -> Keine Tabellenüberschreibung möglich AWT, Swing, JavaFX & SWT 7
B 2D-Grafik BBCode möglich? AWT, Swing, JavaFX & SWT 2
C keine weiteren Events während Drag&Drop Operation möglich? AWT, Swing, JavaFX & SWT 5
Fu3L Keine Transparenten JTextComponents möglich mit Nimbus L&F? AWT, Swing, JavaFX & SWT 5
S Würfelnetz in Java ausgeben möglich? AWT, Swing, JavaFX & SWT 4
jeppi Fonts: Schriftgrößen skalierbarer Fonts wirklich nur als integer möglich? AWT, Swing, JavaFX & SWT 5
philipp Ändern des Inhalts eines Containers nicht möglich AWT, Swing, JavaFX & SWT 2
X Swing JList -> Daten anders darstellen als im Model hinterlegt -> möglich ? AWT, Swing, JavaFX & SWT 9
B Keine Änderungen an JLabel durch Array möglich AWT, Swing, JavaFX & SWT 12
hdi Observer-Pattern bei JPanel nicht möglich? AWT, Swing, JavaFX & SWT 7
0 JMenuItem nicht in zwei JMenus möglich? AWT, Swing, JavaFX & SWT 2
S definierte Größe von contentPane / JPanel möglich? AWT, Swing, JavaFX & SWT 4
I In JFrame zeichnen möglich? AWT, Swing, JavaFX & SWT 3
M GridLayout mit fester Größe möglich? AWT, Swing, JavaFX & SWT 3
G JList hover möglich? AWT, Swing, JavaFX & SWT 2
I Ist das möglich (JTable) AWT, Swing, JavaFX & SWT 19
D Robot: Screenshot vom Desktop Hintergrund möglich ? AWT, Swing, JavaFX & SWT 3
A Tabbed Pane ohne Tabs? - möglich? AWT, Swing, JavaFX & SWT 4
V JTextField - Mehrfachselektion und Eingabe möglich? AWT, Swing, JavaFX & SWT 2
C Umlaute mal möglich, mal nicht AWT, Swing, JavaFX & SWT 2
raptorrs J2D paintComponent: Nur ganzzahlige (-int) Werte möglich? AWT, Swing, JavaFX & SWT 3
J Taskleisten-Eintrag: Ohne JDialog || JFrame möglich ? AWT, Swing, JavaFX & SWT 5
B Setzen von Position > 90 bei JScrollbar nicht möglich AWT, Swing, JavaFX & SWT 3
J "Fading" JDialog möglich? AWT, Swing, JavaFX & SWT 14
G JInternalFrame mit Doppelklick schließen möglich? AWT, Swing, JavaFX & SWT 2
G JTable: Auf Tasten reagieren möglich? AWT, Swing, JavaFX & SWT 2
J jTabbedPane ohne Tabs möglich? AWT, Swing, JavaFX & SWT 5
D Ist es möglich ein solches Layout umzusetzen? (bild inside) AWT, Swing, JavaFX & SWT 3
A Hovern möglich? AWT, Swing, JavaFX & SWT 2
P Zeichnen nur von oben links nach unten rechts möglich AWT, Swing, JavaFX & SWT 4
E [KeyListener] unterdrücken möglich? AWT, Swing, JavaFX & SWT 3
D File verschieben. In java möglich? AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen


Oben