Создайте 2 кнопки на одной оси x в jFrame - PullRequest
0 голосов
/ 20 января 2020

Мой java код ниже содержит изображение и кнопку внизу. Я просто хочу добавить еще одну кнопку, которая находится на той же оси х, что и кнопка, на которой находится текущая кнопка. Я не знаю, как это сделать. Я думал, что попытался манипулировать ab c .weightx и изменить его, и это не имело никакого эффекта. Я включил пи c того, что я пытаюсь сделать ниже.

enter image description here

    import java.awt.GridBagConstraints;
   import java.awt.GridBagLayout;
    import java.io.IOException;
    import java.net.URL;
   import javax.swing.ImageIcon;
    import javax.swing.JButton;
  import javax.swing.JFrame;
  import javax.swing.JLabel;

    class Main extends JFrame {

public static void main(String[] args0) {

    try {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);

        frame.getContentPane().setLayout(new GridBagLayout());

        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridwidth = GridBagConstraints.REMAINDER;
        gbc.weightx = 0.5;
        gbc.weighty = 0.4;
        gbc.fill = GridBagConstraints.BOTH;

        URL url = new URL("http://www.digitalphotoartistry.com/rose1.jpg");
        ImageIcon image = new ImageIcon(url);
        JLabel imageLabel = new JLabel(image);
        frame.add(imageLabel, gbc);

        gbc.weightx = 0.9;
        gbc.weighty = 0.1;
        gbc.fill = GridBagConstraints.NONE;







        JButton b = new JButton("Click Here");
        frame.add(b, gbc);

        frame.pack();
        frame.setVisible(true);

    } catch (IOException e) {
        e.printStackTrace();
    }
}}

Ответы [ 2 ]

1 голос
/ 20 января 2020

Вы не устанавливаете gridx и gridy из своих GridBagConstraint, поэтому они, вероятно, не будут отображаться там, где вы хотите.

Я бы предложил следовать @ Совет Эндрю Томпсона и go для BorderLayout с вашей главной панелью в положении BorderLayout.CENTER и вашими кнопками в отдельном JPanel со значением по умолчанию FlowLayout, которое вы поместите в BorderLayout.SOUTH position.

Если вы хотите придерживаться GridBagLayout:

  • Основная панель: gridx=0 gridy=0 gridwidth=2 weightx=1 weighty=1
  • Левая кнопка: gridx=0 gridy=1
  • Правая кнопка: gridx=1 gridy=1

Я не публикую код, потому что вы узнаете намного больше, если ты все сам попробуешь.

1 голос
/ 20 января 2020

Поместите кнопки в макет центрированного потока. Поместите макет потока в конец страницы макета границы.

...