Java 将按钮与GridBagLayout()对齐到中间右侧

Java 将按钮与GridBagLayout()对齐到中间右侧,java,swing,layout-manager,gridbaglayout,Java,Swing,Layout Manager,Gridbaglayout,我想使用GridBagLayout()将窗口上的几个按钮与此位置对齐,尽管GridBagLayout非常复杂,我不确定如何执行此操作。如何创建这样的布局 请原谅,我不得不使用ASCII,因为我没有足够的代表发布图像 MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM

我想使用GridBagLayout()将窗口上的几个按钮与此位置对齐,尽管GridBagLayout非常复杂,我不确定如何执行此操作。如何创建这样的布局

请原谅,我不得不使用ASCII,因为我没有足够的代表发布图像

MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM?....+.. ....... MMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM?....Button...   MMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM?    .  .        MMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM?....Button...   MMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM?                MMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM?    Button      MMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM?      . ...     MMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM?    Button      MMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM?.... .......... MMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM?    Button      MMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
尽管网格布局相当复杂

您不必使用GridBagLayout

例如:

  • 您可以从
    JPanel
    开始,而不是使用
    GridLayout
    。然后在面板上添加4个按钮

  • 然后通过使用将此面板添加到使用
    BorderLayout
    的框架中
    frame.add(面板、边框布局、线条结束)。有关详细信息,请参见上的Swing教程部分

  • 如果需要在面板周围增加间距,则可以向面板添加
    EmptyBorder
    。有关详细信息,请参见上的Swing教程部分

  • 尽管网格布局相当复杂

    您不必使用GridBagLayout

    例如:

  • 您可以从
    JPanel
    开始,而不是使用
    GridLayout
    。然后在面板上添加4个按钮

  • 然后通过使用将此面板添加到使用
    BorderLayout
    的框架中
    frame.add(面板、边框布局、线条结束)。有关详细信息,请参见上的Swing教程部分

  • 如果需要在面板周围增加间距,则可以向面板添加
    EmptyBorder
    。有关详细信息,请参见上的Swing教程部分


  • 我只是针对一个特定的问题给出这个答案:
    将按钮与GridBagLayout()对齐到右中。

    但为了更好地使用布局,请遵循camickr给出的答案

    ===========================================================

    使用
    GridBagLayout()的解决方案

    下面是带有
    GridBagLayout

    import java.awt.EventQueue;
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.Insets;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.border.EmptyBorder;
    
    public class ButtonsAlign extends JFrame {
    
        private JPanel contentPane;
    
        public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable() {
                public void run() {
                    try {
                        ButtonsAlign frame = new ButtonsAlign();
                        frame.setVisible(true);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    
    
        public ButtonsAlign() {
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            contentPane = new JPanel();
            contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
            setContentPane(contentPane);
            GridBagLayout gbl_panel = new GridBagLayout();
            gbl_panel.columnWidths = new int[]{0, 0, 0, 0};
            gbl_panel.rowHeights = new int[]{0, 0, 0, 0, 0, 0};
            gbl_panel.columnWeights = new double[]{0.0, 0.1, 0.0, Double.MIN_VALUE};
           // gbl_panel.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
    
            contentPane.setLayout(gbl_panel);
    
            JButton btn_1 = new JButton("B1");
            GridBagConstraints gbc_comboBox = new GridBagConstraints();
            gbc_comboBox.insets = new Insets(0, 0, 5, 20);
            gbc_comboBox.gridx = 2;
            gbc_comboBox.gridy = 0;
            gbc_comboBox.weightx=0.0;
            contentPane.add(btn_1, gbc_comboBox);
    
            JButton btn_2 = new JButton("B2");
            GridBagConstraints gbc_btnNewButton = new GridBagConstraints();
            gbc_btnNewButton.insets = new Insets(0, 0, 5, 20);
            gbc_btnNewButton.gridx = 2;
            gbc_btnNewButton.gridy = 1;
            contentPane.add(btn_2, gbc_btnNewButton);
            setSize(200,300);//Only used to show bigger window
            //pack();
        }
    
    }
    

    我只是针对一个特定的问题给出这个答案:
    将按钮与GridBagLayout()对齐到右中。

    但为了更好地使用布局,请遵循camickr给出的答案

    ===========================================================

    使用
    GridBagLayout()的解决方案

    下面是带有
    GridBagLayout

    import java.awt.EventQueue;
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.Insets;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.border.EmptyBorder;
    
    public class ButtonsAlign extends JFrame {
    
        private JPanel contentPane;
    
        public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable() {
                public void run() {
                    try {
                        ButtonsAlign frame = new ButtonsAlign();
                        frame.setVisible(true);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    
    
        public ButtonsAlign() {
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            contentPane = new JPanel();
            contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
            setContentPane(contentPane);
            GridBagLayout gbl_panel = new GridBagLayout();
            gbl_panel.columnWidths = new int[]{0, 0, 0, 0};
            gbl_panel.rowHeights = new int[]{0, 0, 0, 0, 0, 0};
            gbl_panel.columnWeights = new double[]{0.0, 0.1, 0.0, Double.MIN_VALUE};
           // gbl_panel.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
    
            contentPane.setLayout(gbl_panel);
    
            JButton btn_1 = new JButton("B1");
            GridBagConstraints gbc_comboBox = new GridBagConstraints();
            gbc_comboBox.insets = new Insets(0, 0, 5, 20);
            gbc_comboBox.gridx = 2;
            gbc_comboBox.gridy = 0;
            gbc_comboBox.weightx=0.0;
            contentPane.add(btn_1, gbc_comboBox);
    
            JButton btn_2 = new JButton("B2");
            GridBagConstraints gbc_btnNewButton = new GridBagConstraints();
            gbc_btnNewButton.insets = new Insets(0, 0, 5, 20);
            gbc_btnNewButton.gridx = 2;
            gbc_btnNewButton.gridy = 1;
            contentPane.add(btn_2, gbc_btnNewButton);
            setSize(200,300);//Only used to show bigger window
            //pack();
        }
    
    }
    

    不过,按钮是在图像的顶部分层的。如果我把一个面板放在图像上方,它会遮住部分,除非有办法使面板的背景色不可见。你可以使用
    panel.setOpaque(false)
    。我照你说的做了,并成功地将其对齐到右侧,但是,按钮紧靠右侧并触摸窗口的右侧。我怎样才能像我的照片一样把它们移到左边呢?按钮是在图像的顶部分层的。如果我把一个面板放在图像上方,它会遮住部分,除非有办法使面板的背景色不可见。你可以使用
    panel.setOpaque(false)
    。我照你说的做了,并成功地将其对齐到右侧,但是,按钮紧靠右侧并触摸窗口的右侧。我怎样才能像我的照片一样把它们移到左边?