Java Swing JButton对齐-BoxLayout
下面是一个小示例,其中两个单选按钮偏离左列太远 但是,如果我通过注释此代码删除上面的“A”按钮: 然后,2个单选按钮按预期显示,不偏移: 如何使单选按钮像第二种情况一样正确对齐,但有按钮存在?代码如下: Main.java: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
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),则它没有任何效果,仍然与上面相同。有点违反直觉。