2013-03-28 11 views
6

Stworzyłem proste menu w Javie, ale nie wiem, jak zmienić rozmiar przycisku. Moje menu wygląda następująco: Current lookRozmiar przycisku (Java)

Chcę, aby ostatni przycisk miał taki sam rozmiar jak inne przyciski.

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

nie działa.

Code, gdzie stworzyłem przyciski i pola:

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); 

Czy możesz dać mi rady jak mogę zmienić rozmiar? Dzięki.

Odpowiedz

12

Menedżerowie różnych układów traktują preferowany rozmiar inaczej. Również ustawienie rozmiaru z setSize() nie jest dobrym pomysłem. Niech menedżer układu wykona dla ciebie układ. Więcej informacji i przykładów można znaleźć pod numerem A Visual Guide to Layout Managers.

Na przykład można utworzyć oddzielny panel z przyciskami. Ustaw jego układ na GridLayout. W tym układzie komponenty pobierają całą dostępną przestrzeń wewnątrz komórki, a każda komórka ma dokładnie taki sam rozmiar. Dodaj ten panel do kontenera. Zobacz How to Use GridLayout dla przykładów.

Oto prosty demo GridLayout i 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

Dzięki, użyłem twojego rozwiązania :) – Sk1X1

+0

@ Sk1X1 Nie ma za co, cieszę się, że ci pomogło :) – tenorsax

3

Nie należy próbować kontrolować wielkość przycisków (lub elementów) bezpośrednio, należy użyć konfiguracji menedżera układ strony kontener (panel menu w twoim przypadku), aby to zrobić.

Aby to zrobić, zajrzyj do zróżnicowanych Swing Układ kierownicy: Swing Layout Managers

I PERSONNALY wolą JGoodies tworzą API, że znajdę wiele bardziej proste dla użytkownika i utrzymuje się w czasie: JGoodies Forms API

Pozdrawiam

Powiązane problemy