Размер кнопки (Java)

Я создал простое меню в Java, но я не могу понять, как изменить размер кнопки. Мое меню выглядит так: Current look

Я хочу, чтобы последняя кнопка имела тот же размер, что и другие кнопки.

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

не работает.

код, где я создал кнопки и поле:

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

можете ли вы дать мне совет, как я могу изменить размер? Спасибо.

2 ответов


различные менеджеры макетов относятся к предпочтительному размеру по-разному. Кроме того, установка размера с setSize() не очень хорошая идея. Пусть менеджер макета сделает макет за вас. См.визуальное руководство для менеджеров макетов для более подробной информации и примеров.

например, вы можете создать отдельную панель, которая содержит кнопки. Установите его макет в GridLayout. В этом макете компоненты занимают все доступное пространство в своей ячейке, и каждая ячейка имеет точно такой же размер. Добавить это панель к контейнеру. См.как использовать GridLayout для примера.

вот простой пример GridLayout и 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();
            }
        });
    }
}   

вы не должны пытаться контролировать размер ваших кнопок (или компонентов) напрямую, используйте конфигурацию диспетчера макетов вашего контейнера (панель меню в вашем случае), чтобы сделать это.

чтобы сделать это, посмотрите на менеджеров макетов Differents Swing : Менеджеры Макета Качели

Я лично предпочитаю API формы JGOODIES, который я нахожу гораздо более простым для пользователя и поддерживает с течением времени : Формы JGoodies В API

в отношении