2013-03-28 23 views
6

Ich habe ein einfaches Menü in Java erstellt, aber ich kann nicht herausfinden, wie man die Größe einer Schaltfläche ändert. Mein Menü sieht so aus: Current lookButtongröße (Java)

Ich möchte die letzte Taste die gleiche Größe wie andere Tasten haben.

tlacTisk.setSize(10,10); 
tlacTisk.setPreferredSize(10,10); 

funktioniert nicht.

-Code, wo ich Buttons und Box erstellt:

JButton tlacSVG = new JButton(); 
     tlacSVG.setText("Export do SVG"); 
     tlacSVG.addActionListener(new ActionListener() 
     { 
      @Override 
      public void actionPerformed(ActionEvent e) 
      { 
       exportujSVG(); 
      } 
     }); 

     JButton tlacPNG = new JButton(); 
     tlacPNG.setText("Export do PNG"); 
     tlacPNG.addActionListener(new ActionListener() 
     { 
      @Override 
      public void actionPerformed(ActionEvent e) 
      { 
       exportujPNG(); 
      } 
     }); 

     JButton tlacTisk = new JButton(); 
     tlacTisk.setText("Tisk..."); 
     tlacTisk.setPreferredSize(new Dimension(50, 25)); 
     tlacTisk.addActionListener(new ActionListener() 
     { 
      @Override 
      public void actionPerformed(ActionEvent e) 
      { 
       tiskni(); 
      } 
     }); 


     Box boxTlacitek = Box.createVerticalBox(); 
     boxTlacitek.add(Box.createVerticalStrut(5)); 
     boxTlacitek.add(tlacSVG); 
     boxTlacitek.add(Box.createVerticalStrut(10)); 
     boxTlacitek.add(tlacPNG); 
     boxTlacitek.add(Box.createVerticalStrut(10)); 
     boxTlacitek.add(tlacTisk); 
     boxTlacitek.setBorder(BorderFactory.createTitledBorder("Menu")); 

     okno.add(boxTlacitek, BorderLayout.EAST); 

Können Sie mir einen Rat geben, wie ich Größe ändern? Vielen Dank.

Antwort

12

Verschiedene Layoutmanager behandeln die bevorzugte Größe unterschiedlich. Auch die Einstellung der Größe mit setSize() ist keine gute Idee. Lassen Sie den Layout-Manager das Layout für Sie übernehmen. Weitere Details und Beispiele finden Sie unter A Visual Guide to Layout Managers.

Zum Beispiel können Sie ein separates Panel erstellen, das die Schaltflächen enthält. Legen Sie das Layout auf GridLayout fest. In diesem Layout nimmt die Komponente den gesamten verfügbaren Platz in ihrer Zelle ein und jede Zelle hat genau die gleiche Größe. Fügen Sie dieses Feld dem Container hinzu. Beispiele finden Sie in How to Use GridLayout.

Hier ist ein einfaches Demo von GridLayout und GridBagLayout:

enter image description here

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

public class DemoButtons { 
    public DemoButtons() { 
     final JFrame frame = new JFrame("Demo buttons"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JPanel buttonPanel = new JPanel(new GridLayout(3, 1)); 
     buttonPanel.add(new JButton("Export do SVG")); 
     buttonPanel.add(new JButton("Export do PNG")); 
     buttonPanel.add(new JButton("Tisk...")); 

     JPanel east = new JPanel(new GridBagLayout()); 
     GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.anchor = GridBagConstraints.NORTH; 
     gbc.weighty = 1; 
     east.add(buttonPanel, gbc); 

     JPanel center = new JPanel(){ 
      @Override 
      public Dimension getPreferredSize() { 
       return new Dimension(200, 200); 
      } 
     }; 
     center.setBorder(BorderFactory.createLineBorder(Color.BLACK)); 

     frame.add(east, BorderLayout.EAST); 
     frame.add(center); 

     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     try { 
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new DemoButtons(); 
      } 
     }); 
    } 
} 
+1

Danke, ich habe deine Lösung :) – Sk1X1

+0

@ Sk1X1 Gern geschehen, froh, dass es dir geholfen hat :) – tenorsax

3

Sie sollten nicht versuchen, die Größe der Tasten zu steuern (oder Komponenten) direkt, verwenden Sie die Layout-Manager-Konfiguration Ihres Container (das Menü-Panel in Ihrem Fall), um dies zu tun.

Um dies zu tun, haben einen Blick auf die differents Swing-Layout-Manager: Swing Layout Managers

Ich ziehe personnaly die JGoodies API bilden, dass ich viel einfacher zu Benutzer finden und unterhält im Laufe der Zeit: JGoodies Forms API

Grüße