java窗体分页公共组件 控件

我写了一个简单的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();
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值