Размер кнопки (Java)
Я создал простое меню в Java, но я не могу понять, как изменить размер кнопки. Мое меню выглядит так:
Я хочу, чтобы последняя кнопка имела тот же размер, что и другие кнопки.
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
:
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
в отношении