package org.arong.egdownloader.ui.swing;
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextField;
import org.arong.util.NumberUtil;
/**
* 分页组件
* @author dipoo
* @since 2015-03-12
*/
public class AJPager extends JPanel {
private static final long serialVersionUID = 3076829356987409789L;
private Integer pageCount;//总页数
private Integer currentPage;//当前页数
private Integer next;//下一页
private Integer prev;//上一页
private Integer maxPage = 11;
//分页选项左边界
private Integer minBound;
//分页选项右边界
private Integer maxBound;
private Object data;
private ActionListener pageListener;
public AJPager(int x, int y, int width, int height, ActionListener pageListener){
this.setBounds(x, y, width, height);
this.pageListener = pageListener;
this.setLayout(new FlowLayout());
}
public void change( Integer countPage, Integer current){
pageCount = countPage;
currentPage = current;
if(currentPage == null){
currentPage = 1;
}else{
if(currentPage >= pageCount){
currentPage = pageCount;
}
if(currentPage < 1){
currentPage = 1;
}
}
next = currentPage + 1;
if(next > pageCount){
next = pageCount;
}
prev = currentPage - 1;
if(prev < 1){
prev = 1;
}
if(pageCount <= maxPage){
minBound = 1;
maxBound = pageCount;
}else{
//增加因子,最大分页数中间距两边距离
Integer m = maxPage / 2;
//初步过滤
//过滤左边界
if(currentPage - m < 1){
minBound = 1;
}else{
minBound = currentPage - m;
}
//过滤右边界
if(currentPage + m > pageCount){
maxBound = pageCount;
}else{
maxBound = currentPage + m;
}
//二次过滤
if(minBound.equals(1)){
maxBound = maxPage;
}
if(maxBound.equals(pageCount)){
minBound = maxBound - maxPage + 1;
}
}
this.removeAll();
JButton fbtn = new AJButton("首页");
fbtn.setName("1");
fbtn.setToolTipText("1");
if(pageListener != null){
fbtn.addActionListener(pageListener);
}
this.add(fbtn);
if(prev >= 1){
JButton btn = new AJButton("上一页");
btn.setName(prev + "");
btn.setToolTipText(prev + "");
if(pageListener != null){
btn.addActionListener(pageListener);
}
this.add(btn);
}
for(int i = minBound; i <= maxBound; i++ ){
JButton btn = new AJButton("" + i + "");
btn.setName(i + "");
if(i == currentPage){
btn.setUI(AJButton.blueBtnUi);
}else{
btn.setUI(AJButton.greenBtnUi);
if(pageListener != null){
btn.addActionListener(pageListener);
}
}
this.add(btn);
}
if(next <= pageCount){
JButton btn = new AJButton("下一页");
btn.setToolTipText(next + "");
btn.setName(next + "");
if(pageListener != null){
btn.addActionListener(pageListener);
}
this.add(btn);
}
JButton lbtn = new AJButton("尾页");
lbtn.setName(pageCount + "");
lbtn.setToolTipText(pageCount + "");
if(pageListener != null){
lbtn.addActionListener(pageListener);
}
this.add(lbtn);
final JButton hidebtn = new JButton("");
hidebtn.setName(pageCount + "");
hidebtn.setToolTipText(pageCount + "");
if(pageListener != null){
hidebtn.addActionListener(pageListener);
}
hidebtn.setVisible(false);
this.add(hidebtn);
final JTextField pageTf = new JTextField(currentPage + "");
pageTf.setLayout(null);
final JPanel this_ = this;
final int total = pageCount;
pageTf.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
this_.updateUI();
if(e.getKeyCode() == KeyEvent.VK_ENTER){
if(NumberUtil.can2Int(pageTf.getText().trim())){
Integer current = Integer.parseInt(pageTf.getText().trim());
if(current <= total){
hidebtn.setName(pageTf.getText().trim());
}else{
hidebtn.setName(total + "");
pageTf.setText(total + "");
}
hidebtn.doClick();
}
}
}
});
this.add(pageTf);
}
public void setPageCount(Integer pageCount) {
this.pageCount = pageCount;
}
public Integer getPageCount() {
return pageCount;
}
public void setPageListener(ActionListener pageListener) {
this.pageListener = pageListener;
}
public ActionListener getPageListener() {
return pageListener;
}
public void setCurrentPage(Integer currentPage) {
this.currentPage = currentPage;
}
public Integer getCurrentPage() {
return currentPage;
}
public Integer getNext() {
return next;
}
public Integer getPrev() {
return prev;
}
public void setMaxPage(Integer maxPage) {
this.maxPage = maxPage;
}
public Integer getMaxPage() {
return maxPage;
}
public Integer getMinBound() {
return minBound;
}
public Integer getMaxBound() {
return maxBound;
}
public void setData(Object data) {
this.data = data;
}
public Object getData() {
return data;
}
}