【问题标题】:how to add component in box layout on north of other and make them all anchor on south?如何在其他北方的盒子布局中添加组件并使它们都锚定在南方?
【发布时间】:2012-10-31 21:25:39
【问题描述】:

我尝试制作一款非常迷你的游戏。

我有一个JPanel,它使用一个包含三个JLabelBoxLayout.Y_AXIS(JLabels 的名称 = 1,2,3) 我需要该面板内的一个组件来锚定南(所以我使用胶水)

查看结果会是这样的:


1

2

3


然后我有一个JButton。 如果用户点击按钮,那JPanel会添加一个新的JLabel(JLabel的名字=neww)

查看结果如下:


1

2

3

新的


但我需要这样的东西:


新的

1

2

3


我该怎么办?

可以用BoxLayout处理吗?

这是我尝试过的:

public class help extends JFrame implements ActionListener{
JPanel panel = new JPanel();
JButton insert = new JButton("insert");
JLabel a = new JLabel("1");
JLabel b = new JLabel("2");
JLabel c = new JLabel("3");
public help()  {
    setSize(300, 200);
    getContentPane().setLayout(new BorderLayout());
    getContentPane().add(panel, BorderLayout.CENTER);
    panel.setPreferredSize(new Dimension(250,150));
    getContentPane().add(insert, BorderLayout.SOUTH);
    insert.setPreferredSize(new Dimension(50,50));
    insert.addActionListener(this);
    panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
    panel.add(Box.createVerticalGlue());
    panel.add(a);
    panel.add(b);
    panel.add(c);

    setVisible(true);
}

public static void main (String[]args){
   new help();
}

@Override
public void actionPerformed(ActionEvent e) {
    panel.add(new JLabel("NEW"));
    panel.revalidate();
    panel.repaint();
}

}

非常感谢您的任何帮助!

【问题讨论】:

    标签: java swing jpanel layout-manager boxlayout


    【解决方案1】:

    有一个版本的add() 方法使用索引参数。既然要在胶水后加,就用1吧。

    panel.add(new JLabel("NEW"), 1);
    

    【讨论】:

      【解决方案2】:

      您可以在BorderLayout.NORTH 位置添加另一个JPanel,然后添加到该面板。您也可以为该面板使用BoxLayout

      注意,不需要为您的JFrame 设置布局,因为BorderLayout 是此容器的默认布局。此外,没有必要将面板的首选大小设置为BorderLayout 会忽略这一点。

      【讨论】:

      • 我不能..因为以后会有很多操作来添加和删除许多jlabel..所以如果我这样做会更复杂...非常感谢您的纠正..
      猜你喜欢
      • 1970-01-01
      • 2015-09-27
      • 2019-03-13
      • 2022-11-15
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-30
      相关资源
      最近更新 更多