这里的成员属性主要看下 JLable部分,和 JButton部分,至于 JTable部分还有其他的 DefaultTableModel那个是表格的部分,不是本文的重点,可以忽略,窗体和监听也不重要,因为本文主要介绍的是布局的方便
/*----------------------------Member---------------------------*/
private InformationFrame systemFrame;//窗口
private JLabel page = new JLabel();//页码
private JButton addBtn = new JButton("添加");
private JButton deleteBtn = new JButton("删除");
private JButton modifyBtn = new JButton("修改");
private JButton prePageBtn = new JButton("上一页");
private JButton nextPageBtn = new JButton("下一页");
private JButton searchBtn = new JButton("搜索");
private JLabel countryLabel = new JLabel("国家:");
private JTextField countryTextFile = new JTextField();
private SystemBtnActionListen btnListen;
private DefaultTableModel novelTableModel = new DefaultTableModel();
private JTable novelTable = new JTable();//表格
private JScrollPane scrollPane = new JScrollPane(novelTable);//滚动面板
//页码显示,其他部分控制
private int totalPage = 1;//总页数
private int currentPage = 1;//当前页数
private int informationCount = 0;//总信息量
private int everyPage = 10;//每页几条
private String currentCountry = "";//当前搜索的国家
总共有四个部分的配置,第一个是面板的基本配置,第二个是上面部分按钮和搜索的配置,中间是表格的配置,下面是翻页按钮的配置,这里给定的两个数值,其实就是在布局时根据位可进行调整。坐标点为板块的左上角坐标
public InformationPanel(InformationFrame systemFrame) {
this.systemFrame = systemFrame;//传入窗口
basicInit();//基本配置
upInit(20,50);//上面部分初始化
midInit(10, 100);//中间部分初始化
downInit(350, 620);//下面部分初始化
}
面板的基本配置,是将面板配置大小,配置绝对布局,最后一行是创建监听。
/**
*
*
* @describe 基本配置
*/
private void basicInit()
{
setSize(PanelSize.SYSTEM_WIDTH, PanelSize.SYSTEM_HEITH);//设置大小
setLayout(null);//设置绝对布局
btnListen = new SystemBtnActionListen(systemFrame);//按钮监听初始化
}
按钮部分和搜索部分板块的代码,传入的参数是这些按钮总体所在的位置
这个部分的 initBtn 是初始化按钮的方法,这样设计的目的是由于一个工程或说一个面板都会有很多的按钮需要初始化,所以我把他封装成一个方法,每次需要初始化我只需要传参就可以。传哪些参数会在后面的方法代码部分进行介绍。
unitInt方法是初始化一个标签加一个输入框的位置,后面同样会具体介绍
/**
*
* @param x 面板基点
* @param y
* @describe 上面部分初始化,传入该板块位置
*/
private void upInit(int x,int y)
{
//初始化按钮
initBtn(addBtn,"add",0,0,x,y);
initBtn(deleteBtn,"delete",UnitSize.BTN_WIDTH+UnitSize.BTN_SPACE,0,x,y);
initBtn(modifyBtn,"modify",2*(UnitSize.BTN_WIDTH+UnitSize.BTN_SPACE),0,x,y);
//搜索部分
unitInit(countryLabel, countryTextFile, 3*(UnitSize.BTN_WIDTH+UnitSize.BTN_SPACE)+100, y);
initBtn(searchBtn,"search",3*(UnitSize.BTN_WIDTH+UnitSize.BTN_SPACE)+280+100,0,x,y);
}
/**
*
* @param x 面板基点
* @param y
* @describe 中间部分初始化,传入该板块位置
*/
private void midInit(int x,int y)
{
scrollPane.setBounds(x, y, PanelSize.SYSTEM_WIDTH-2*x, 500);//设置滚动面板大小
novelTable.setModel(novelTableModel);//传入tablemodel
add(scrollPane);//添加滚动面板
columnInit(novelTableModel);//添加列名
}
/**
*
* @param x 面板基点
* @param y
* @describe 下面部分初始化,传入该板块位置
*/
private void downInit(int x,int y)
{
initBtn(prePageBtn, "prePage", 0, 0, x, y);
int pageWid = 100;
page.setBounds(x+UnitSize.BTN_WIDTH, y, pageWid, UnitSize.BTN_HEITH);
page.setFont(new Font(null,Font.BOLD,18));
page.setHorizontalAlignment(JLabel.CENTER);
add(page);
//new PageViewThread(page,novelTableModel).start();//开启页码更新
initBtn(nextPageBtn, "nextPage", UnitSize.BTN_WIDTH+pageWid,0, x, y);
}
这里第一个肯定是传进要初始化的按钮,第二个参数是command,当点击时标识是那个按钮被点击,btnX,btnY是按钮在相对面板基点的位置,后面两个参数是面板基点位置,只要把传进板块的基点位置直接传过来就行了
/**
*
* @param btn
* @param command
* @param btnX 按钮在板块中的位置
* @param btnY
* @param x 面板基点
* @param y
* @describe 按钮初始化
*/
private void initBtn(JButton btn,String command,int btnX,int btnY,int x,int y)
{
btn.setLocation(btnX+x, btnY+y);//设置按钮位置
btn.setSize(UnitSize.BTN_WIDTH, UnitSize.BTN_HEITH);//设置大小
btn.setFont(new Font(null,Font.BOLD,18));//设置字体
btn.setActionCommand(command);//设置点击命令
btn.addActionListener(btnListen);//添加监听
add(btn);//添加到面板
}
为什么把这两个放在一起,当然是因为输入框,正常情况下,都会告知这个输入框,或者下拉框是选择什么,因此把这两者放在一起,仔细看,传参时,第二个参数既不是JComboBox也不是JTextFile,而是他们的父类JComponent,这样更通用,可以应用于输入框,也可以是下拉框或者其他。
/**
*
* @param label
* @param component
* @param x
* @param y
* @describe 初始化行
*/
private void unitInit(JLabel label ,JComponent component,int x ,int y)
{
int width = 80;//lebel
int height = 40;
label.setBounds(x, y, width, height);//设置位置
label.setFont(new Font(null,Font.BOLD,18));//设置字体
add(label);
component.setBounds(x+width, y, 200, height);//设置位置
component.setFont(new Font(null,Font.BOLD,18));//设置字体
add(component);
}
如图可以看到,我将其分为这三个板块,如果你想更改他们的位置,只需要更改极坐标,就可以移动整个板块。