2017-01-24 4 views
0

Ich möchte wissen, ob es möglich ist, die Größe von JButton Komponenten in einem GridBagLayout zu setzen, möchte ich meine Schaltflächen "Start" und "Quit" untereinander, und ich möchte sie machen größer, die Größe ist irrelevant, ich möchte das allgemeine Verfahren kennen.Making JButtons gleiche Größe mit GridBagLayout

Ich habe verschiedene Dinge ausprobiert, die ich im Internet gefunden habe (mit anderen Layouts), aber es endete einfach mit mehr Fehlern.

public class Display implements Runnable 
{ 

    public Display() 
    { 

    } 

    @Override 
    public void run() { 

     JFrame frame = new JFrame(); 
     frame.setTitle("Title"); 
     frame.setPreferredSize(new Dimension(500,700)); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     createComponents(frame.getContentPane()); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    private void createComponents(Container cont) 
    { 

     GridBagLayout pane = new GridBagLayout(); 
     JButton button1 = new JButton("Start"); 
     JButton button2 = new JButton("Quit"); 

     button1.setSize(new Dimension(200,200)); 
     button1.setAlignmentX(Component.CENTER_ALIGNMENT); 
     button2.setAlignmentX(Component.CENTER_ALIGNMENT); 


     cont.setLayout(pane); 
     cont.add(button1); 
     cont.add(button2); 

    } 

    public static void main(String[] args) 
    { 

     Display d = new Display(); 
     SwingUtilities.invokeLater(d); 

    } 
} 

How it should look:

+2

Verwenden Sie GridLayout, wenn die Komponenten alle die gleiche Größe haben sollen. Denken Sie daran, dass Sie JPanels verschachteln können, die jeweils einen eigenen Layout-Manager verwenden. –

+0

'GridBagConstraints # fill'? – MadProgrammer

+0

Das ist ein großer Rahmen für nur zwei Tasten. Müssen mehr Komponenten dorthin gehen? Bereitstellung von ASCII-Grafiken oder einer einfachen Zeichnung des * beabsichtigten * Layouts der (gesamten) GUI bei minimaler Größe und wenn sie veränderbar ist, mit mehr Breite und Höhe. 'button1.setSize (neue Dimension (200,200));' Ein Layout-Manager wird eher die bevorzugte Größe als die Größe berücksichtigen, aber setze auch diese nicht, da die bevorzugte Größe nicht besser als eine Schätzung ist. –

Antwort

2

Wie erwähnt von Hovercraft Full Of Eels ist dies gut geeignet, um eine einzelne Spalte GridLayout. Ein Rasterlayout macht alle Komponenten gleich groß. Stellen Sie einen Layout-Komponentenabstand bereit und fügen Sie dem Panel, das die Schaltflächen enthält, einen größeren leeren Rahmen hinzu, und der Auftrag ist erledigt.

..und ich möchte, dass sie (Tasten) größer

Es gibt eine Reihe von Möglichkeiten, um Tasten zu vergrößern. z.B.

  1. Stellen Sie eine größere Schrift ein.
  2. Rufen Sie setMargin(Insets) an, um mehr Platz um den Text herum hinzuzufügen.
  3. Verwenden Sie ein großes Symbol.
  4. Den Text länger machen (für mehr Breite).

Die 3. und 4. Wege sind ziemlich willkürlich.


Dieses Beispiel verwendet die erst beide sowie einen leeren Rahmen um die Schaltflächen weiter weiß-Raum zu bieten.

enter image description here

Überprüfen Sie die Kommentare im Code für weitere Einzelheiten.

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

public class ButtonColumnLayout { 

    private JComponent ui = null; 
    String[] labels = {"Start", "Stop", "Quit"}; 
    // adjust numbers to change spacing between button text and button edge 
    Insets insets = new Insets(10,40,10,40); 

    ButtonColumnLayout() { 
     initUI(); 
    } 

    public void initUI() { 
     if (ui!=null) return; 

     // adjust last two numbers to change spacing between buttons 
     ui = new JPanel(new GridLayout(0, 1, 10, 10)); 
     // adjust numbers to change border around buttons 
     ui.setBorder(new EmptyBorder(40,100,40,100)); 

     for (String s : labels) { 
      ui.add(getBigButton(s)); 
     } 
    } 

    private final JButton getBigButton(String text) { 
     JButton b = new JButton(text); 
     // adjust float value to change font size 
     b.setFont(b.getFont().deriveFont(25f)); 
     b.setMargin(insets); 

     return b; 
    } 

    public JComponent getUI() { 
     return ui; 
    } 

    public static void main(String[] args) { 
     Runnable r = new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (Exception useDefault) { 
       } 
       ButtonColumnLayout o = new ButtonColumnLayout(); 

       JFrame f = new JFrame(o.getClass().getSimpleName()); 
       f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
       f.setLocationByPlatform(true); 

       f.setContentPane(o.getUI()); 
       f.pack(); 
       f.setMinimumSize(f.getSize()); 

       f.setVisible(true); 
      } 
     }; 
     SwingUtilities.invokeLater(r); 
    } 
} 
Verwandte Themen