Следующий код кажется, что он должен заполнять заданное пространство равномерно двумя связанными JButtons, но вместо этого он заполняет всю верхнюю строку FlowLayout одной кнопкой - игнорируя максимальный размер кнопки - и помещает другую кнопку в новой строке, только частично видимой. Как я могу получить кнопки для равномерного заполнения JPanel бок о бок?Создание Java SplitButton
import java.awt.*;
import javax.swing.*;
public class SplitButton extends JPanel {
// The other half.
private JButton button2;
private JButton button3;
public SplitButton(String left, String right, int width, int height) {
super();
//setBackground(Color.GREEN);
//setBorder(BorderFactory.createLineBorder(Color.BLUE));
setMinimumSize(new Dimension(width, height));
FlowLayout flow = new FlowLayout();
flow.setAlignment(FlowLayout.LEFT);
flow.setHgap(0);
flow.setVgap(0);
setLayout(flow);
button2 = new JButton(right);
button2.setMinimumSize(new Dimension(width/2, height));
button2.setMaximumSize(new Dimension(width/2, height));
button2.setPreferredSize(new Dimension(width/2, height));
add(button2);
button3 = new JButton(right);
button3.setMinimumSize(new Dimension(width/2, height));
button2.setMaximumSize(new Dimension(width/2, height));
button2.setPreferredSize(new Dimension(width/2, height));
add(button3);
}
}
Используйте [GridLayout] (https://docs.oracle.com/javase/tutorial/uiswing/layout/grid.html). 'FlowLayout' не предназначен для равномерного заполнения доступного пространства, либо используйте' GridLayout', либо используйте [GridBagLayout] (https://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html) –
Спасибо! Да, я попробовал GridLayout, как через 10 минут после того, как задал вопрос. Это также устраняет необходимость установки размеров. –
Ха-ха, на самом деле, если вы используете соответствующий макет для данного прецедента, никогда не нужно использовать какие-либо методы 'setXxXSize (...)', поскольку это относится к проблеме 'Layout Manager'. Для остальных, ВЫ МОЖЕТЕ ПРИВЕТСТВУЕТЕ И ХРАНИЛИ СМОТРЕТЬ :-) –