如题,JFrame在使用pack方法控制窗体大小的前提下如何让组件上下排列?尽量考虑跨平台和可维护(即使用布局方式而不是指定坐标)
import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
class MySnakeFrame extends JFrame {
/**
* 定义
*/
private JPanel jp = new JPanel();
private JLabel jl = new JLabel("score: 0");
private JButton bl = new JButton("Play game");
private MyCanvas myCanvas;
public MySnakeFrame(String title) throws HeadlessException {
/**
* 设置窗体标题
*/
setTitle(title);
setLayout(new GridLayout());
// GridLayout gy =new GridLayout(10,12);
/**
* 先设置窗体大小才能正常让窗体关闭
*/
setBounds(0,0,100,100);
/**
* 关闭窗体提示
*/
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
JOptionPane.showMessageDialog(null,"程序退出!","提示"
,JOptionPane.ERROR_MESSAGE);
System.exit(0);
}
});
myCanvas = new MyCanvas();
jp.add(myCanvas);
jp.add(bl);
jp.add(jl);
add(jp);
pack();
setVisible(true);
}
}
设置JPanel布局为BorderLayout,
JPanel jp = new JPanel(new BorderLayout());
jp.add(myCanvas);
jp.add(bl,BorderLayout.SOUTH);