我写了一个简单的java公共组件,有首页 上一页 第n页 下一页 尾页 跳转到 使用需要实现一个接口,下面贴出,欢迎各位亲参考,还有不着急的话给我评论一番也好,小弟需要成长哈~
本来要传张效果图的,在公司,网络限制,就算了
package roi.manager;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.regex.Pattern;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import ui.MessageBox;
/**
* <p>roi.manager.PageControl.java</p>
* <p>Description:分页组件,使用此组件需要实现IPageContro接口 </p>
* <p>Copyright: groups 2014-10-31</p>
* <p>Company: </p>
* @author bard email: 178867729@qq.com
* @date 2014-10-31
* @version 1.0
*/
public class PageControl extends JPanel {
private JButton jButtonFirst;//首页
private JButton jButtonUp;//上一页
private JLabel jLabelPage;//当前页
private JButton jButtonDown;//下一页
private JButton jButtonLast;//末页
private JLabel jLabelTotalPage;//总页数
private JButton jButtonToPage;//跳转
private JTextField jTextFieldToPage;//跳转页数
private int page=1;//当前页
private int totalPage=1;//总页数
private String[] headers;//表头
private IPageControl cIPageControl;//父类控件
private JButton buttonNext;//下n条
public PageControl(IPageControl iControl){
this.cIPageControl = iControl;
init();
}
public void init() {
int count=cIPageControl.getPageCount();
totalPage = count % cIPageControl.getPageSize() == 0 ? count / cIPageControl.getPageSize(): (count / cIPageControl.getPageSize()) + 1;
headers = cIPageControl.getHeaders();
jButtonFirst = new JButton("首 页");
jButtonFirst.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
repainPage(1);
}
});
jButtonUp = new JButton("上一页");
jButtonUp.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
repainPage(page-1);
}
});
jLabelPage=new JLabel("第 1 页");
jLabelPage.setFont(new java.awt.Font("宋体",java.awt.Font.BOLD, 14));
jLabelTotalPage=new JLabel("共 "+totalPage+" 页");
jLabelTotalPage.setFont(new java.awt.Font("宋体",java.awt.Font.BOLD, 14));
jButtonDown = new JButton("下一页");
jButtonDown.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
repainPage(page+1);
}
});
jButtonLast = new JButton("末 页");
jButtonLast.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
repainPage(totalPage);
}
});
jButtonToPage=new JButton("跳 转");
jButtonToPage.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String txtNum= jTextFieldToPage.getText().trim();
if(!Pattern.matches("\\d{1,5}", txtNum)){
MessageBox.ok((Component) cIPageControl, "输入页数格式错误!", "提示");
return;
}
if(Integer.parseInt(txtNum)<1||Integer.parseInt(txtNum)>totalPage){
MessageBox.ok((Component) cIPageControl, "输入页数超出范围!", "提示");
return;
}
page=Integer.parseInt(txtNum);
repainPage();
}
});
jTextFieldToPage=new JTextField("1",2);
jTextFieldToPage.setHorizontalAlignment(JTextField.CENTER);
this.add(jButtonFirst);
this.add(jButtonUp);
this.add(jLabelPage);
this.add(jButtonDown);
this.add(jButtonLast);
this.add(jLabelTotalPage);
this.add(jButtonToPage);
this.add(jTextFieldToPage);
// this.setPreferredSize(new Dimension(1000, 40));
repainPage();
}
public void repainPage() {
int count=cIPageControl.getPageCount();
((javax.swing.table.DefaultTableModel)cIPageControl.getJTable().getModel()).setDataVector(cIPageControl.getTableData(page), headers);
cIPageControl.setTableStyle();
totalPage = count % cIPageControl.getPageSize() == 0 ? count / cIPageControl.getPageSize(): (count / cIPageControl.getPageSize()) + 1;
jButtonUp.setEnabled(true);
jButtonFirst.setEnabled(true);
jButtonDown.setEnabled(true);
jButtonLast.setEnabled(true);
if(page<=1){
jButtonUp.setEnabled(false);
jButtonFirst.setEnabled(false);
}
if(page>=totalPage){
jButtonDown.setEnabled(false);
jButtonLast.setEnabled(false);
}
jLabelPage.setText("第 "+page+" 页");
jLabelTotalPage.setText("共 "+totalPage+" 页");
System.out.println(page+":"+totalPage);
}
//指定页数跳转
public void repainPage(int page) {
this.page=page;
repainPage();
}
public PageControl getEasyStyleControl(){
this.removeAll();
buttonNext=new JButton("下 "+cIPageControl.getPageSize()+" 条");
this.add(buttonNext);
buttonNext.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
repainEasyStyle(page+1);
}
});
return this;
}
/**
*
* <p>repainEasyStyle</p>
* <p>Description: 简单分页组件按钮设置</p>
* <p>Copyright: groups 2014-11-20</p>
* <p>Company: </p>
* @author bard email:178867729@qq.com
* @date 2014-11-20 下午1:18:33
* @version 1.0
* @param page1
*/
public void repainEasyStyle(int page1) {
int count=cIPageControl.getPageCount();
((javax.swing.table.DefaultTableModel)cIPageControl.getJTable().getModel()).setDataVector(cIPageControl.getTableData(page=page1), headers);
cIPageControl.setTableStyle();
buttonNext.setEnabled(cIPageControl.getPageSize()<count);
// System.out.println(cIPageControl.getPageSize()+":"+count);
}
}
下面是需要实现的接口,应为不同需求查询数据的方式一样,说以只能给个接口了,我用的是sql server 也写了个公共方法,如果哪位需要给我留言,我再贴出来。
package roi.manager;
/**
* <p>roi.manager.IPageControl.java</p>
* <p>Description: 分页组件接口</p>
* <p>Copyright: groups 2014-10-31</p>
* <p>Company: </p>
* @author bard email: 178867729@qq.com
* @date 2014-10-31
* @version 1.0
*/
public interface IPageControl {
/**
*
* <p>getJTable</p>
* <p>Description:需要分页的数据表 </p>
* <p>Copyright: groups 2014-11-3</p>
* <p>Company: </p>
* @author bard email:178867729@qq.com
* @date 2014-11-3 下午12:32:24
* @version 1.0
* @return Jtable
*/
public javax.swing.JTable getJTable();
/**
*
* <p>getTableData</p>
* <p>Description: 表数据,分页后的,二维数组</p>
* <p>Copyright: groups 2014-11-3</p>
* <p>Company: </p>
* @author bard email:178867729@qq.com
* @date 2014-11-3 下午12:33:44
* @version 1.0
* @param pageSize 页面大小
* @param page 页数
* @return 数据数组
*/
public Object[][] getTableData(int page);
/**
*
* <p>setTableStyle</p>
* <p>Description: 设置表格样式</p>
* <p>Copyright: groups 2014-11-3</p>
* <p>Company: </p>
* @author bard email:178867729@qq.com
* @date 2014-11-3 下午12:57:44
* @version 1.0
*/
public void setTableStyle();
/**
*
* <p>getPageCount</p>
* <p>Description: 获得总条数</p>
* <p>Copyright: groups 2014-11-3</p>
* <p>Company: </p>
* @author bard email:178867729@qq.com
* @date 2014-11-3 下午12:58:14
* @version 1.0
* @return
*/
public int getPageCount();
/**
*
* <p>getPageSize</p>
* <p>Description: 获得页容量</p>
* <p>Copyright: groups 2014-11-4</p>
* <p>Company: </p>
* @author bard email:178867729@qq.com
* @date 2014-11-4 上午8:34:49
* @version 1.0
* @return
*/
public int getPageSize();
/**
*
* <p>getHeaders</p>
* <p>Description: 获得表头数组</p>
* <p>Copyright: groups 2014-11-4</p>
* <p>Company: </p>
* @author bard email:178867729@qq.com
* @date 2014-11-4 下午12:31:01
* @version 1.0
* @return
*/
public String[] getHeaders();
}