2016-07-01 14 views
6

Ich möchte die folgende GUI mit Java Swing erstellen.Wie erstelle ich die folgende GUI in Java Swing?

GUI I want to have

Da ich nicht genug, um mit Java Swing erlebt, ich bin nicht sicher, wie genau das GUI neu zu erstellen.

Ich habe mit Gridlayout versucht, die wie folgt aussieht:

GridLayout

ich andere LayoutManagers habe versucht, aber aufgrund meiner Unerfahrenheit, konnte ich nichts bekommen auch nur entfernt die GUI ähnelt ich will leisten.

Ich muss wahrscheinlich GridBagLayout verwenden, aber ich habe es versucht und konnte einfach nichts tun. Ich bin nicht sicher, wie man GridBagLayout genau verwendet, besonders, da es eine Varianz der Anzahl der benötigten Spalten gibt (2, 2 und dann 3). Hier

ist der verwendete Code für die Erstellung der zweiten GUI:

import java.awt.*; 
import javax.swing.*; 

public class GUITest extends JFrame { 

public GUITest() { 
    super("Testing Title"); 
    Container pane = getContentPane(); 

    pane.setLayout(new GridLayout(3,1)); 

    pane.add(getHeader()); 
    pane.add(getTextArea()); 
    pane.add(getButtonPanel()); 

} 

public JComponent getHeader() { 
    JPanel labelPanel = new JPanel(); 
    labelPanel.setLayout(new GridLayout(1,2)); 
    labelPanel.setSize(getPreferredSize()); 

    JLabel labelLocal = new JLabel("Left value: ", JLabel.CENTER); 
    JLabel labelDB = new JLabel("Right value: ", JLabel.CENTER); 

    labelPanel.add(labelLocal); 
    labelPanel.add(labelDB); 

    return labelPanel; 
} 

public JComponent getTextArea() { 
    JPanel textPanel = new JPanel(); 
    textPanel.setLayout(new GridLayout(1,2,5,0)); 

    JTextArea testTextArea = new JTextArea(); 
    testTextArea.setEditable(false); 
    JScrollPane sp1 = new JScrollPane(testTextArea); 

    JTextArea testTextArea2 = new JTextArea(); 
    JScrollPane sp2 = new JScrollPane(testTextArea2); 
    testTextArea2.setEditable(false); 

    testTextArea.setText("Hello Hello Hello\nTesting!\ntesterino\ntesteroni"); 
    testTextArea2.setText("Hello Hello Hello\nTesting!\ntest\nABC123\ncdef123\nhijk123"); 

    textPanel.add(sp1); 
    textPanel.add(sp2); 
    return textPanel; 
} 

public JComponent getButtonPanel() { 
    JPanel inner = new JPanel(); 
    inner.setLayout(new FlowLayout((FlowLayout.CENTER),0,100)); 
    inner.add(new JButton("Do something")); 
    inner.add(new JButton("Do something different")); 
    inner.add(new JButton("Do something even more different")); 
    return inner; 
} 

public static void main(String[] args) { 
    GUITest e = new GUITest(); 
    e.setSize(700, 500); 
    e.setVisible(true); 
    e.setResizable(false); 
    e.setDefaultCloseOperation(EXIT_ON_CLOSE); 
    e.setLocationRelativeTo(null); 
} 
} 

Ich bin dankbar für jede Art von Unterstützung!

+0

Sie könnten 'MigLayout' verwenden. Es ist einfach –

+1

Der GUI Editor der NetBeans IDE wäre mein Ansatz. Da dieser Code im Vergleich zur Geschäftslogik nicht wirklich interessant ist. Auch die Eigenschaften und dergleichen werden zum Probieren vorgestellt. –

+2

@JoopEggen Ich verstehe nicht, was Sie zu sagen versuchen .... es ist wie wenn es zwei Dinge gibt, aber Sie konzentrieren sich auf eine – taclight

Antwort

5

Hier Ihren Code mit nur ein paar kleinen Änderungen ist :)

 import java.awt.*; 
    import javax.swing.*; 

    public class GUITest extends JFrame { 

     public GUITest() { 

       super("Testing Title"); 
       Container pane = getContentPane(); 
       pane.setLayout(new BorderLayout());//Modified Layout to BorderLayout 
       pane.add(getHeader(),BorderLayout.NORTH); //BorderLayout.NORTH 
       pane.add(getTextArea(),BorderLayout.CENTER);//BorderLayout.CENTER 
       pane.add(getButtonPanel(),BorderLayout.SOUTH);//BorderLayout.SOUTH 

     } 

     public JComponent getHeader() { 

      JPanel labelPanel = new JPanel(); 
      labelPanel.setLayout(new GridLayout(1,2)); 
      labelPanel.setSize(getPreferredSize());  
      JLabel labelLocal = new JLabel("Left value: ", JLabel.CENTER); 
      JLabel labelDB = new JLabel("Right value: ", JLabel.CENTER); 
      labelPanel.add(labelLocal); 
      labelPanel.add(labelDB); 
      return labelPanel; 

     } 

    public JComponent getTextArea() { 

      JPanel textPanel = new JPanel();  
      textPanel.setLayout(new GridLayout(1,2,5,0)); 
      JTextArea testTextArea = new JTextArea(); 
      testTextArea.setEditable(false); 
      JScrollPane sp1 = new JScrollPane(testTextArea); 
      JTextArea testTextArea2 = new JTextArea(); 
      JScrollPane sp2 = new JScrollPane(testTextArea2); 
      testTextArea2.setEditable(false); 
      testTextArea.setText("Hello Hello Hello\nTesting!\ntesterino\ntesteroni"); 
      testTextArea2.setText("Hello Hello Hello\nTesting!\ntest\nABC123\ncdef123\nhijk123"); 
      textPanel.add(sp1); 
      textPanel.add(sp2); 
      return textPanel; 
    } 

    public JComponent getButtonPanel() { 

      JPanel inner = new JPanel(); 
      inner.setLayout(new FlowLayout());//Modified to standard FlowLayout 
      inner.add(new JButton("Do something")); 
      inner.add(new JButton("Do something different")); 
      inner.add(new JButton("Do something even more different")); 
      return inner; 

    } 

    public static void main(String[] args) { 

      GUITest e = new GUITest(); 
      e.pack(); //Modified setSize(700,500) to pack() 
      e.setVisible(true); 
      e.setResizable(false); 
      e.setDefaultCloseOperation(EXIT_ON_CLOSE); 
      e.setLocationRelativeTo(null); 
    } 
} 
+1

Halten Sie Ihren Code richtig ein. – user1803551

4

GridLayout Größen alle Zellen die gleichen, d. H. Ihre äußere Layout mit 3 Zeilen und 1 Spalte macht 3 Zellen der gleichen Größe.

Verwenden Sie stattdessen Border für Ihren Außenbehälter und fügen Sie die oberen, mittleren und unteren Platten mit Einschränkungen BorderLayout.NORTH, BorderLayout.CENTER und BorderLayout.SOUTH bzw.

7

Sie so etwas wie dies versuchen könnte:

import javax.swing.*; 
import javax.swing.border.EmptyBorder; 
import java.awt.*; 

public class Example { 

    public static void main(String[] args) { 

     JFrame jFrame = new JFrame(); 
     jFrame.setTitle("Testing Title"); 
     jFrame.setLocationRelativeTo(null); 

     JPanel mainPanel = new JPanel(new BorderLayout()); 
     mainPanel.setBorder(new EmptyBorder(5, 5, 5, 5)); 

     JPanel listPanel = new JPanel(new GridLayout(0, 2, 10, 0)); 

     JPanel leftListPanel = new JPanel(new BorderLayout(0, 10)); 
     JLabel leftLabel = new JLabel("Left value:"); 
     JTextArea leftTextArea = new JTextArea("Hello Hello Hello\nTesting!\ntest"); 
     JScrollPane leftScrollPane = new JScrollPane(leftTextArea); 
     leftListPanel.add(leftLabel, BorderLayout.NORTH); 
     leftListPanel.add(leftScrollPane, BorderLayout.CENTER); 

     JPanel rightListPanel = new JPanel(new BorderLayout(0, 10)); 
     JLabel rightLabel = new JLabel("Right value:"); 
     JTextArea rightTextArea = new JTextArea("Hello Hello Hello\nTesting!\ntest"); 
     JScrollPane rightScrollPane = new JScrollPane(rightTextArea); 
     rightListPanel.add(rightLabel, BorderLayout.NORTH); 
     rightListPanel.add(rightScrollPane, BorderLayout.CENTER); 

     listPanel.add(leftListPanel); 
     listPanel.add(rightListPanel); 
     mainPanel.add(listPanel, BorderLayout.CENTER); 

     JPanel buttonsPanel = new JPanel(new BorderLayout()); 
     buttonsPanel.setBorder(new EmptyBorder(10, 10, 10, 10)); 
     buttonsPanel.add(new JButton("Do something"), BorderLayout.WEST); 
     buttonsPanel.add(new JButton("Do something different"), BorderLayout.CENTER); 
     buttonsPanel.add(new JButton("Do something even more different"), BorderLayout.EAST); 
     mainPanel.add(buttonsPanel, BorderLayout.SOUTH); 

     jFrame.setContentPane(mainPanel); 
     jFrame.pack(); 
     jFrame.setVisible(true); 
    } 
} 

Erläuterung:

Zum einen habe ich eine Haupt JPanel mit einem BorderLayout. Diese JPanel wird horizontal geteilt, die CENTRE Komponente wird eine weitere JPanel sein, die die Textbereiche und Beschriftungen enthält, und die SOUTH Komponente wird eine JPanel sein, die die Schaltflächen enthält.

The JPanel, dass die Textbereiche enthält, ist ein GridLayout gegeben, so dass er leicht vertikal aufgespalten werden kann, und auch ein hgap von 10 gegeben ist etwas Abstand hinzuzufügen.

Die linken und rechten JPanels, die in das gesetzt werden, sind beide gleich. Sie haben eine BorderLayout mit einer vgap, um Abstand hinzuzufügen. Die Komponente NORTH ist eine JLabel und die CENTRE Komponente ist eine JScrollPane, die eine JTextArea enthält.

Schließlich ist die SOUTH Komponente des Haupt JPanel ist ein weiterer JPanel die ein BorderLayout wieder gegeben ist. Drei JButton s werden mit den Attributen WEST, CENTRE und EAST hinzugefügt, die entsprechend zugewiesen sind.

Das Gesamtergebnis wie folgt aussieht:

enter image description here

+0

Fügen Sie Ihre Textbereiche in Bildlauffenster ein. – user1803551

+0

@ user1803551 danke, aktualisiert – explv