BorderLayout——边框布局,分为东南西北中五块。如果JFrame设置的是这个布局,则往JFrame上添加组件(Panel等等)时则必须指明放在哪块。它可以对容器组件进行安排,并调整其大小,使其符合下列五个区域:北、南、东、西、中。每个区域最多只能包含一个组件,并通过相应的常量进行标识:NORTH、SOUTH、EAST、WEST、CENTER。当使用边框布局将一个组件添加到容器中时,要使用这五个常量之一,例如:
Panel p = new Panel();
p.setLayout(new BorderLayout());
p.add(new Button("Okay"),BorderLayout.SOUTH) ;
String[] itemArray = { "人人对战", "人机对战" };
JComboBox cbItem = new JComboBox(itemArray);
package GoBang;
import static GoBang.GoBangconfig.x;
import static GoBang.GoBangconfig.y;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class GoBang extends JPanel implements GoBangconfig {
public int[][] isArrive = new int[15][15];
public static void main(String[] args) {
GoBang gf = new GoBang();
gf.initUI();
}
public void initUI() {
//jf的基本操作
JFrame jf = new JFrame();
jf.setTitle("五子棋游戏");// 设置标题
jf.setSize(700, 600);// 设置大小
jf.setLocationRelativeTo(null);// 显示位置
jf.setDefaultCloseOperation(3);// 关闭操作
jf.getContentPane().setBackground(Color.gray); //给jf设置背景色
jf.setLayout(new BorderLayout()); //jf设置为流式布局
Dimension dim1 = new Dimension(150, 0);// 设置右半panel的大小 (设置为0是因为此处的高度是和jf的高度相同,是不起作用的)
Dimension dim2 = new Dimension(140, 40);// 设置右边按钮的大小
// 实现左半部分的功能
this.setBackground(Color.gray);
jf.add(this, BorderLayout.CENTER);// 将棋盘添加到框架布局的中间位置
当上面的代码执行完之后,一个五子棋的棋盘就已经完成了,如下图所示:
To be continued...
第(二)部分将继续讲让棋盘能够下棋的具体操作——添加Gobang Listener
附:关于设置大小,区分一下setSize和setPreferredSize
1、setPreferredSize需要在使用布局管理器的时候使用,布局管理器会获取空间的preferredsize,因而可以生效。例如 borderlayout在north中放入一个panel,panel的高度可以通过这样实现:panel.setPreferredSize(new Dimension (0, 100));这样就设置了一个高度为100的panel,宽度随窗口变化。 2、setSize,setLocation,setBounds方法需要在不使用布局管理器的时候使用,也就是setLayout(null)的时候可以使用这 个方法控制布局。 3 、setSize(包括setLocation)在绝对布局中才能生效。也就是在容器【常见为JPanel】中调用setLayout(null);方法才 能生效。这样的弊端是:设置为绝对布局,则意味着不能实现响应式布局。即不管JFrame变的多大,控件还保持着设定的 大小。 4、setPreferredSize意味着先获取容器【常见为JPanel】的空间大小,控件的大小即为容器的大小。所以我们可以通过设 定容器【常见为JPanel】的大小,再去控制控件的大小。
就目前Java的代码水平可以简单地理解为JFrame应该使用setSize来控制大小,而其他组件都是需要先建立new一个Dimension类的对象dim1,再用setPreferredSize()。比如: