2017-05-22 4 views
1

Dieser Code zeigt nichts an, ich habe viele Wege ausgeschöpft, aber es zeigt nichts auf der GUI (Ich habe eine Hauptklasse, die das auch schon aufruft). Bitte helfen Sie. Ich versuche, die beiden JButtons horizontal am unteren Rand der Seite und JTextField und JLabel in der Mitte des Bildschirms zu platzieren.Java Button Platzierung mit BorderLayout

package test; 

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

public class Gui extends JFrame { 
    private JLabel label; 
    private JButton clear; 
    private JButton copy; 
    private JTextField textfield; 

    public Gui(){ 

     super("test"); 

     clear = new JButton("Clear"); 
     copy = new JButton("Copy"); 
     label = new JLabel(""); 
     textfield = new JTextField("enter text here"); 

     JPanel bottom = new JPanel(new BorderLayout()); 

     JPanel subBottom = new JPanel(); 
     subBottom.add(copy); 
     subBottom.add(clear); 


     JPanel centre = new JPanel (new BorderLayout()); 

     JPanel subCentre = new JPanel(); 
     subCentre.add(label); 
     subCentre.add(textfield); 





     bottom.add(subBottom, BorderLayout.PAGE_END); 
     centre.add(subCentre, BorderLayout.CENTER); 

     } 


    } 
+2

Sind Sie etwas zu diesen Platten zu tun, nicht annehmen, wie fügen sie an den Rahmen? – Qwerky

+0

Sie sollten sich [GridLayouts] (http://docs.oracle.com/javase/tutorial/uiswing/layout/grid.html) ansehen. Es mag ein wenig verwirrend erscheinen, also müssen Sie es vielleicht zweimal lesen. Aber so habe ich gelernt, GridLayouts zu benutzen, und das ist sehr hilfreich für mich. – CodingNinja

+0

@ Cameron2222 siehe meine Antwort unten. Ist es das, was du wolltest? – CodingNinja

Antwort

2

ich näher kam, aber es ist nicht recht Code, die JFrame ist 500x500 so funktioniert dies beruht darauf, dass ... keine besseren Vorschläge als das, was ich habe?

package lab6; 

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

public class Gui extends JFrame { 
    private JLabel label; 
    private JButton clear; 
    private JButton copy; 
    private JTextField textfield; 

    public Gui(){ 

     super("test"); 

     clear = new JButton("Clear"); 
     copy = new JButton("Copy"); 
     label = new JLabel("label"); 
     textfield = new JTextField("enter text here"); 

     JPanel masterPanel = new JPanel(new BorderLayout()); 

     JPanel top = new JPanel(); 
     top.setPreferredSize(new Dimension(100, 200)); 

     JPanel bottom = new JPanel(); 

     JPanel subBottom = new JPanel(); 
     subBottom.add(copy); 
     subBottom.add(clear); 


     JPanel centre = new JPanel(); 

     JPanel subCentre = new JPanel(); 
     subCentre.add(label); 
     subCentre.add(textfield); 


     bottom.add(subBottom); 
     centre.add(subCentre); 

     masterPanel.add(bottom, BorderLayout.PAGE_END); 
     masterPanel.add(top, BorderLayout.PAGE_START); 
     masterPanel.add(centre, BorderLayout.CENTER); 


     add(masterPanel); 
    } 


} 
+0

'Ich versuche, die zwei JButtons horizontal am unteren Rand der Seite zu platzieren '- Lesen Sie den Abschnitt aus dem Swing-Tutorial auf [Wie BorderLayout zu verwenden] (http://docs.oracle.com /javase/tutorial/uiswing/layout/border.html) für Arbeitsbeispiele. Wenn Sie das Bedienfeld mit den Schaltflächen am unteren Rand möchten, müssen Sie beim Hinzufügen des Bedienfelds zum Rahmen eine Einschränkung angeben. – camickr

+0

Warum verwenden Sie ein "Master-Panel"? Hast du das Tutorial nicht gelesen? Die Arbeitsbeispiele zeigen Ihnen, wie Sie die GUI besser erstellen können. Beginnen Sie mit dem Arbeitsbeispiel und nehmen Sie Änderungen vor. – camickr

+0

Das Lernprogramm gibt an: "Die Komponenten sind nach ihren bevorzugten Größen und den Beschränkungen der Containergröße angeordnet. Die Nord- und Südkomponenten können horizontal gedehnt werden; die Ost- und Westkomponenten können vertikal gestreckt werden; die Centerkomponente kann beide horizontal strecken und vertikal, um den übrig gebliebenen Raum zu füllen. " Ich kann nicht sehen, wie es besagt, wie man die Beschränkungen anwendet? – Cameron2222

3

Ihr Code ist ein bisschen zu kompliziert. Sie benötigen nur zwei Felder: centre und buttons. Es gibt zwei Gründe, Ihre UI wird nicht angezeigt:

  1. Sie haben nie die Platten mit dem Rahmen
  2. Sie nie auf true sichtbar gesetzt (Sie erreichen dies durch setVisible(true) verwenden), es sei denn, Sie dies in der Klasse haben Sie lief es in

eine einfache Möglichkeit, die gewünschte Benutzeroberfläche zu erreichen, ist wie so (ich eine Hauptmethode hinzugefügt, um das Fenster anzuzeigen.):

import javax.swing.*; 
import java.awt.*; 
public class test extends JFrame { 
    public Test() { 
     super("test"); 
     JPanel buttons = new JPanel(); 
     JPanel centre = new JPanel(); 
     add(buttons, BorderLayout.SOUTH); //these lines add the 
     add(centre, BorderLayout.CENTER); //panels to the frame 
     JButton clear = new JButton("Clear");      // No need 
     JButton copy = new JButton("Copy");      // to declare 
     JLabel label = new JLabel("Label");      // these 
     JTextField textfield = new JTextField("enter text here"); // privately 
     buttons.add(copy); 
     buttons.add(clear); 
     centre.add(label); 
     centre.add(textfield); 
     pack(); 
     setLocationRelativeTo(null); 
     setVisible(true); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } //end constructor 

    //added main method to run the UI 
    public static void main(String[] args) { 
     new Experiments(); 
    } //end main 
} //end class 

Und es zeigt das Fenster:

Window

+0

Ausgezeichnet danke für die Vereinfachung für mich. Ich hatte es erscheinen, die GUI wurde in einem Haupt erstellt, das Gui go = new Gui() enthielt; \t \t \t go.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); \t \t \t go.setSize (500,500); \t \t \t gehen.setVisible (wahr); – Cameron2222

+0

@ Cameron2222 Ok, dann war dein einziges Problem, dass du deine Panels nicht hinzugefügt hast. Froh, dass ich helfen konnte! Bitte denken Sie darüber nach, diese Antwort zu akzeptieren, wenn Sie es hilfreich fanden. Vielen Dank! – CodingNinja

+0

@ Cameron2222 denken Sie an 'pack();' als Vakuumversiegelungsbeutel. Es schließt die Bauteile einfach fest, ohne sie abzuschneiden. Dies ist nützlich, weil Sie die Größe des Rahmens nicht erraten müssen, und passen Sie ihn so lange an, bis er passt. Dies wird automatisch für Sie erledigt. werfen Sie einen Blick auf [diesen Javadoc] (http://docs.oracle.com/javase/8/docs/api/java/awt/Window.html#pack--) und [diesen Beitrag.] (https: // stackoverflow.com/questions/22982295/what-does-pack-do) – CodingNinja