Java Swing JButton对齐-BoxLayout

Java Swing JButton对齐-BoxLayout,java,swing,Java,Swing,下面是一个小示例,其中两个单选按钮偏离左列太远 但是,如果我通过注释此代码删除上面的“A”按钮: 然后,2个单选按钮按预期显示,不偏移: 如何使单选按钮像第二种情况一样正确对齐,但有按钮存在?代码如下: Main.java: package layoutdemo; import java.awt.Color; import java.awt.Frame; import javax.swing.BoxLayout; import javax.swing.JFrame; import jav

下面是一个小示例,其中两个单选按钮偏离左列太远

但是,如果我通过注释此代码删除上面的“A”按钮:

然后,2个单选按钮按预期显示,不偏移:

如何使单选按钮像第二种情况一样正确对齐,但有按钮存在?代码如下:

Main.java:

package layoutdemo;

import java.awt.Color;
import java.awt.Frame;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.WindowConstants;

public class Main extends JFrame {  
    public Main() {
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setExtendedState(Frame.MAXIMIZED_BOTH);
        getContentPane().setLayout(new BoxLayout(this.getContentPane(), BoxLayout.X_AXIS));
        getContentPane().setBackground(Color.black);
        add(new LeftPanel());
        pack();
        setVisible(true);
    }

    public static void main(String args[]) {
        new Main();
    }
}
LeftPanel.java:

package layoutdemo;

import java.awt.Component;
import java.awt.Dimension;

import javax.swing.BoxLayout;
import javax.swing.JPanel;
import javax.swing.JRadioButton;

public class LeftPanel extends JPanel {
    public LeftPanel() {
        this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
        //add(new ButtonPanel());
        add(new JRadioButton("RadioBut2"));
        add(new JRadioButton("RadioBut1"));
    }

    @Override
    public Dimension getPreferredSize() {
        Component p = getParent();
        while(p.getParent() != null) {
            p = p.getParent();
        }
        Dimension dimension = p.getSize();
        return new Dimension(100, (int) (dimension.getHeight()));
    }
    
    @Override 
    public Dimension getMaximumSize() {
        return getPreferredSize();
    }
}
package layoutdemo;

import java.awt.Component;
import java.awt.Dimension;

import javax.swing.JPanel;
import javax.swing.JToggleButton;

public class ButtonPanel extends JPanel {
    public ButtonPanel() {
        add(new JToggleButton("A"));
    }
    
    @Override
    public Dimension getPreferredSize() {
        Component p = getParent();
        while(p.getParent() != null) {
            p = p.getParent();
        }
        Dimension dimension = p.getSize();
        return new Dimension(dimension.width, 50);
    }
    
    @Override 
    public Dimension getMaximumSize() {
        return getPreferredSize();
    }
}
ButtonPanel.java:

package layoutdemo;

import java.awt.Component;
import java.awt.Dimension;

import javax.swing.BoxLayout;
import javax.swing.JPanel;
import javax.swing.JRadioButton;

public class LeftPanel extends JPanel {
    public LeftPanel() {
        this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
        //add(new ButtonPanel());
        add(new JRadioButton("RadioBut2"));
        add(new JRadioButton("RadioBut1"));
    }

    @Override
    public Dimension getPreferredSize() {
        Component p = getParent();
        while(p.getParent() != null) {
            p = p.getParent();
        }
        Dimension dimension = p.getSize();
        return new Dimension(100, (int) (dimension.getHeight()));
    }
    
    @Override 
    public Dimension getMaximumSize() {
        return getPreferredSize();
    }
}
package layoutdemo;

import java.awt.Component;
import java.awt.Dimension;

import javax.swing.JPanel;
import javax.swing.JToggleButton;

public class ButtonPanel extends JPanel {
    public ButtonPanel() {
        add(new JToggleButton("A"));
    }
    
    @Override
    public Dimension getPreferredSize() {
        Component p = getParent();
        while(p.getParent() != null) {
            p = p.getParent();
        }
        Dimension dimension = p.getSize();
        return new Dimension(dimension.width, 50);
    }
    
    @Override 
    public Dimension getMaximumSize() {
        return getPreferredSize();
    }
}

这可能与这些项目的“alignmentX”属性有关。正在尝试将所有这些项设置为相同的alignmentX值


(1+)有关更多信息,请查看上的Swing教程部分。谢谢!我设置buttonpanel.setAlignmentX(0);buttonpanel是我上面例子中的“A”按钮,奇怪的是,它固定了下面单选按钮的对齐方式。但是,如果我将“A”按钮下面的单选按钮分别设置为setAlignmentX(0),则它没有任何效果,仍然与上面相同。有点违反直觉。