Как установить положение JComponent в BoxLayout? - PullRequest
0 голосов
/ 05 апреля 2020

Я хочу использовать 2 JPanel как panel и panel_1. Я хочу автоматически добавить изображение на панель с помощью JLabel, а также добавить JButton к panel_1.

Как изменить размер кнопки в соответствии с изображением над кнопкой?

public class Testing extends JFrame {

    public Testing() {
        this.setSize(590, 327);
        this.setTitle("JFrame");
        getContentPane().setLayout(null);

        JPanel panel = new JPanel();
        panel.setBounds(118, 136, 321, 89);
        getContentPane().add(panel);
        panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));

        JLabel lblImage = new JLabel("image for button1");
        panel.add(lblImage);

        JLabel lblImage_1 = new JLabel("image for button2");
        panel.add(lblImage_1);

        JLabel lblImage_2 = new JLabel("image for button3");
        panel.add(lblImage_2);

        JPanel panel_1 = new JPanel();
        panel_1.setBounds(118, 30, 321, 77);
        getContentPane().add(panel_1);
        panel_1.setLayout(new BoxLayout(panel_1, BoxLayout.X_AXIS));

        JButton btnNewButton = new JButton("New button 1");
        panel_1.add(btnNewButton);

        JButton btnNewButton_1 = new JButton("New button 2");
        panel_1.add(btnNewButton_1);

        JButton btnNewButton_2 = new JButton("New button 3");
        panel_1.add(btnNewButton_2);
    }

    public static void main(String[] args) throws Exception {
        Testing frame = new Testing();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    }
}

1 Ответ

3 голосов
/ 05 апреля 2020

Если ваша цель - разместить кнопку над изображением и увеличить ширину кнопки вместе с изображением, тогда:

  • Избавьтесь от использования пустых макетов и .setBounds(...) (это просто хороший общий совет)
  • Поместите JLabel с изображением в JPanel, который использует BorderLayout с JLabel в позиции BorderLayout.CENTER
  • Поместите кнопку над JLabel в той же самой JPanel, используя положение BorderLayout.PAGE_START.
  • Затем поместите этот JPanel везде, где он необходим, в вложенные JPanels GUI, каждый из которых использует свой собственный менеджер компоновки.

BorderLayout позволит центральный компонент, чтобы заполнить эту позицию, и расширит позиции PAGE_START и PAGE_END, чтобы заполнить необходимую ширину. Если верхний и нижний компоненты шире, это также увеличит ширину контейнера.

...