Java 如何将JLabel与JPanel的底部对齐

Java 如何将JLabel与JPanel的底部对齐,java,swing,layout-manager,Java,Swing,Layout Manager,我希望JLabel项3位于JPanel的底部,因为有时它会出现在窗口中的2d数组的顶部。我尝试使用项3.setVerticalAlignment(JLabel.BOTTOM)。方法,但它不起作用。有什么建议吗 public class Sokoban extends JPanel { private Contents[][] field; private Rectangle2D.Double r1; private static final Color[] colours = {

我希望
JLabel
项3位于
JPanel
的底部,因为有时它会出现在窗口中的2d数组的顶部。我尝试使用
项3.setVerticalAlignment(JLabel.BOTTOM)
。方法,但它不起作用。有什么建议吗

public class Sokoban extends JPanel {

private Contents[][] field;
private Rectangle2D.Double r1;
private static final Color[] colours = {
        Color.BLACK, Color.RED, Color.GREEN, Color.CYAN, Color.MAGENTA, Color.BLUE, Color.YELLOW
    };

private LevelReader lr = new LevelReader();
private int currentLevel;
private Contents [][] levelData;
private int countMoves = 1;
JLabel item3 = new JLabel("ccc");


long time1;


public Sokoban(){
    lr.readLevels("m1.txt");

    this.setPreferredSize(new Dimension(900,500));
    this.setFocusable(true);
    this.requestFocus();
    this.addKeyListener(new MyKeyListener());
    initLevel(0);
    this.add(item3);
    item3.setVerticalAlignment(JLabel.BOTTOM);





}

public static void main (String[] args) {
    JFrame f = new JFrame("Sokoban");
    f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    f.setLayout(new FlowLayout());

    f.add(new Sokoban());


    f.pack();
    f.setVisible(true);  


}

您可以使用
BorderLayout
并将标签添加到容器的
PAGE\u END
位置

setLayout(new BorderLayout());
add(itemLabel, BorderLayout.PAGE_END);
JLabel itemLabel = new JLabel("ccc", JLabel.CENTER);
当然,您需要设置水平对齐,以实现最初由标签的
JPanel
FlowLayout
容器生成的沿X轴对齐

setLayout(new BorderLayout());
add(itemLabel, BorderLayout.PAGE_END);
JLabel itemLabel = new JLabel("ccc", JLabel.CENTER);

这真的取决于你想要什么。查看下面的内容,查看可用的不同类型的LayoutManager及其示例:其他答案告诉了您可以做什么,因此我将解释当前解决方案不起作用的原因。您误解了
设置垂直对齐(int)
的作用。它设置文本相对于标签的显示位置,而不是标签在其容器中的显示位置。