我试图在Java中创建一个简单的程序,其顶部需要8 JLabels
,其下方只有一个JButton
。我尝试使用BoxLayout
然后使用FlowLayout
,但会发生的是JLabels
在程序开始时消失。单击button
时,所有内容都会正确显示,但您必须手动调整窗口大小。有人可以解释我做错了什么吗?谢谢!
public class ProgramUI {
private JButton _jbutton;
private ArrayList<JLabel> _jlabels;
private JFrame _jframe;
private JPanel _top, _bottom;
public ProgramUI(){
_jframe = new JFrame ();
_jframe.getContentPane().setLayout(new BoxLayout(_jframe.getContentPane(), BoxLayout.Y_AXIS));
_top = new JPanel();
_jframe.add(_top);
_bottom = new JPanel();
_jframe.add(_bottom);
_top.setLayout(new FlowLayout(FlowLayout.LEFT));
_bottom.setLayout(new FlowLayout(FlowLayout.LEFT));
_jlabels = new ArrayList<JLabel>();
for (int i=0; i<8; i++) {
JLabel label = new JLabel();
_jlabels.add(label);
_top.add(label);
//...rest of code is not relevant
}
_jbutton = new JButton();
_bottom.add(_jbutton);
_jframe.pack();
_jframe.setVisible(true);
_jframe.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
}
答案 0 :(得分:0)
我既不推荐FlowLayout
也不推荐BoxLayout
。 BoxLayout
非常简单和不便携。 FlowLayout
甚至不是布局
经理,这是个玩笑。
我建议使用内置GroupLayout
或第三方MigLayout
。你需要花一些时间学习如何
创造一个好的布局。
以下是MigLayout
的示例。
package com.zetcode;
import java.awt.EventQueue;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import net.miginfocom.swing.MigLayout;
public class ProgramUI extends JFrame {
public ProgramUI() {
initUI();
}
private void initUI() {
setLayout(new MigLayout("nogrid"));
add(new JLabel("Label"));
add(new JLabel("Label"));
add(new JLabel("Label"));
add(new JLabel("Label"));
add(new JLabel("Label"));
add(new JLabel("Label"));
add(new JLabel("Label"));
add(new JLabel("Label"), "wrap");
add(new JButton("Button"));
pack();
setTitle("MigLayout example");
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
EventQueue.invokeLater(() -> {
ProgramUI ex = new ProgramUI();
ex.setVisible(true);
});
}
}
截图: