嘿,我正在尝试将面板内的所有面板对齐到较大面板的左侧。
这是我目前面临的情况:
对于主面板(包含所有其他面板的面板 - 我将其称为主面板!) 我在创建时使用以下代码:
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
对于其中的每个面板我也使用BoxLayout,但我在每个面板上尝试了[jpanel] .setAlignmentX(Component.LEFT_ALIGNMENT)之类的东西,但这似乎不起作用。
任何帮助将不胜感激!
:)
编辑:对于“盒子尺寸(m):”标签,有没有办法将它对齐到它所包含的面板顶部?这是一个独立的小组。
编辑:修复后:
下面的解决方案,感谢所有人的帮助:)
答案 0 :(得分:5)
根据您的需要,您有很多可能性。
我在这里所做的只是使用复合面板并使用GridBagLayout
来调整布局
public class BadLayout03 {
public static void main(String[] args) {
new BadLayout03();
}
public BadLayout03() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new MasterPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class MasterPane extends JPanel {
public MasterPane() {
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 1;
gbc.weightx = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.insets = new Insets(4, 4, 4, 4);
gbc.anchor = GridBagConstraints.WEST;
add(new DimensionsPane(), gbc);
gbc.gridy++;
add(new ColorPane(), gbc);
gbc.gridy++;
add(new ReinforementPane(), gbc);
gbc.gridy++;
add(new SealableTopPane(), gbc);
gbc.gridy++;
add(new CardGradePane(), gbc);
gbc.gridy++;
add(new QuantityPane(), gbc);
gbc.gridy++;
add(new OrderPricePane(), gbc);
}
}
public class DimensionsPane extends JPanel {
public DimensionsPane() {
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 1;
gbc.weightx = 1;
gbc.anchor = GridBagConstraints.WEST;
add(new JLabel("Dimensions of box (m):"), gbc);
gbc.gridx = 1;
gbc.gridy = 0;
gbc.anchor = GridBagConstraints.EAST;
add(new JLabel("Length: 33.0"), gbc);
gbc.gridy++;
add(new JLabel("Width: 3.0"), gbc);
gbc.gridy++;
add(new JLabel("Height: 3.0"), gbc);
}
}
public class ColorPane extends JPanel {
public ColorPane() {
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.weightx = 1;
gbc.anchor = GridBagConstraints.WEST;
add(new JLabel("Colour :"), gbc);
gbc.gridx = 1;
gbc.gridy = 0;
gbc.anchor = GridBagConstraints.EAST;
add(new JLabel("0"), gbc);
}
}
public class ReinforementPane extends JPanel {
public ReinforementPane() {
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.weightx = 1;
gbc.anchor = GridBagConstraints.WEST;
add(new JLabel("Reinforcement :"), gbc);
gbc.gridx = 1;
gbc.gridy = 0;
gbc.anchor = GridBagConstraints.EAST;
add(new JLabel("None"), gbc);
}
}
public class SealableTopPane extends JPanel {
public SealableTopPane() {
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.weightx = 1;
gbc.anchor = GridBagConstraints.WEST;
add(new JLabel("Selable top :"), gbc);
gbc.gridx = 1;
gbc.gridy = 0;
gbc.anchor = GridBagConstraints.EAST;
add(new JLabel("No"), gbc);
}
}
public class CardGradePane extends JPanel {
public CardGradePane() {
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.weightx = 1;
gbc.anchor = GridBagConstraints.WEST;
add(new JLabel("Grade of card:"), gbc);
gbc.gridx = 1;
gbc.gridy = 0;
gbc.anchor = GridBagConstraints.EAST;
add(new JLabel("1"), gbc);
}
}
public class QuantityPane extends JPanel {
public QuantityPane() {
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.weightx = 1;
gbc.anchor = GridBagConstraints.WEST;
add(new JLabel("Quantity:"), gbc);
gbc.gridx = 1;
gbc.gridy = 0;
gbc.anchor = GridBagConstraints.EAST;
add(new JLabel("1"), gbc);
}
}
public class OrderPricePane extends JPanel {
public OrderPricePane() {
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.weightx = 1;
gbc.anchor = GridBagConstraints.WEST;
add(new JLabel("Order price:"), gbc);
gbc.gridx = 1;
gbc.gridy = 0;
gbc.anchor = GridBagConstraints.EAST;
add(new JLabel("$558.9"), gbc);
}
}
}
答案 1 :(得分:3)
您可以使用MigLayout:
import java.awt.Color;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import net.miginfocom.swing.MigLayout;
public class PanelAlignment extends JFrame {
JPanel contentPane = new JPanel();
JPanel firstPanel = new JPanel();
JPanel secondPanel = new JPanel();
JPanel thirdPanel = new JPanel();
JLabel dimOfBox, rein, seaTop;
public PanelAlignment() {
contentPane.setLayout(new MigLayout());
firstPanel.add(dimOfBox = new JLabel("Dimensions of box (m): "));
firstPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
contentPane.add(firstPanel,"wrap");
secondPanel.add(rein = new JLabel("Reinforcement: "));
secondPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
contentPane.add(secondPanel,"wrap");
thirdPanel.add(dimOfBox = new JLabel("Sealable top: "));
thirdPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
contentPane.add(thirdPanel,"wrap");
add(contentPane);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
PanelAlignment pa = new PanelAlignment();
pa.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
pa.pack();
pa.setVisible(true);
}
});
}
}
你会得到这样的东西:
我最近回答了类似问题here
祝你好运! :)