仿网页分页页码

  本文manymore13原创,转载请标明出处  http://blog.csdn.net/manymore13/article/details/8472586 

   

     2012 苹果发布了ipad mini和iphone 5 ,微软发布win 8,wp8,谷歌推出果冻豆,并推出Nexus 7,十八大的召开,还有因玛

人预言是世界末日论等等在2012发生的大事.... 所以2012注定不是一个平静之年。我在去年闲暇时间看了不少各种仿某某的技术文

章,如仿微信登陆界面 欢迎界面qq界面以及仿网易新闻上面的什么什么..... 总之有各种仿。

     仿照未必是一件坏事,先要学会仿照,接着理解他,吃透他,等你懂了一定原理后,发现以前的东西不怎么够好,需要改进,那

过你的改进,使你的软件用户体验更好,我想这应该就是微创新吧。

在这里引用下名人的话以增加文章的深度啊 大笑

       “  用户体验创新是决定互联网应用能否受欢迎的关键因素,这种创新叫'微创新','微创新'引领互联网新的趋势和浪潮  ”。——周鸿祎

好了引用完名人的话总算啰嗦一把,下面继续啰嗦哈,直接切入正题

为了跟进潮流,我也来 仿某某,,以后再学习微创新。今天我仿得是网站最喜欢用的文章分页时的页码,看看效果图与代码你就知

道了。




package com.manymore13.page;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.security.acl.LastOwnerException;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;



public class PageNumDemo extends JFrame
{
	
	private int sumPage = 35;//总的页码数,这里作为Demo,就写个固定值
	private int currentPage=1;      // 默认是第一页
	private JPanel pageBtns = new JPanel(); // 存放一系列页码按钮 默认流布局
	
	PageNumDemo()
	{
		Image image = null;
		try
		{
			image = ImageIO.read((this.getClass().getResource("./image/logo.png")));
		} catch (IOException e){
			e.printStackTrace();
		}
		this.setIconImage((Image)image);// 设置窗口左上角的图标,我这里是个快播的图标
		this.setTitle("仿网页分页页码"); //设置窗口标题
		this.setLayout(new FlowLayout(15,20,20)); //设置JFrame的布局
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 档点击叉叉时,窗口可关闭
		this.setVisible(true); // 窗口可见
		this.setLocationRelativeTo(null); //窗口居中
		
		setPageBottom(1); //默认显示第一页 ,设置页码布局
		this.setSize(850, 118); // 窗口宽高
		this.setResizable(true);// 设置窗口可拉伸
	}
	/**
	 * 
	 * @param selectNum 你按下的页码数字,例如你按下按钮5,就需要传个整型5
	 */
	private void setPageBottom(int selectNum)
	{
		
		pageBtns.removeAll();
		if(selectNum<=0 || selectNum>sumPage){
			return;
		}
		// 这个是显示数字按钮的总个数,不包括首页 尾页等其他按钮
		int countNumBtn = 9; // 首页 1 2 3 4 5 6 7 8 9 尾页
		int half = countNumBtn/2;
		int startNum = 0;
		int endNum = 0;
		
		JButton btnFistPage = new JButton("首页");
		btnFistPage.setActionCommand("首页");
		btnFistPage.setToolTipText("首页");
		btnFistPage.setToolTipText("首页");
		btnFistPage.addActionListener(new BottomPageButtonAction());
		JButton btnLastPage = new JButton("末页");
		btnLastPage.setActionCommand("末页");
		btnLastPage.addActionListener(new BottomPageButtonAction());
		btnLastPage.setToolTipText("共"+sumPage+"页");	
		
		
		Container con = this.getContentPane();
		con.invalidate();
		pageBtns.add(btnFistPage);
		if(selectNum !=1){
			
			JButton btnPrePage = new JButton("上一页");
			btnPrePage.setActionCommand("上一页");
			btnPrePage.setToolTipText("上一页是第"+(selectNum-1>=1?selectNum-1:1)+"页");
			btnPrePage.addActionListener(new BottomPageButtonAction());
			pageBtns.add(btnPrePage);
			
		}
	
		// 下面开始计算从左至右数字键(JButton)上的text
		int minBtnNum = selectNum-half;
		int maxBtnNum = selectNum+half;
		if(minBtnNum>0 && maxBtnNum<=sumPage){
			startNum = minBtnNum;
			endNum = maxBtnNum;
		}else if(minBtnNum<=0){
			startNum =1;
			endNum = countNumBtn>sumPage?sumPage:countNumBtn;
		}else if(maxBtnNum>sumPage){
			startNum = sumPage >countNumBtn?sumPage-(countNumBtn-1):1;
			endNum = sumPage;
		}
		
		for(int i=startNum;i<=endNum;i++){
			JButton btn = new JButton();
			btn.addActionListener(new BottomPageButtonAction(i));
			btn.setActionCommand("数字");
			btn.setToolTipText("第"+i+"页");
			btn.setText(i+"");
			if(i==selectNum){
				btn.setBackground(Color.red);
			}else{
				btn.setBackground(Color.white);
			}
			pageBtns.add(btn);
		}
		
		if(selectNum != sumPage){
			JButton btnNextPage = new JButton("下一页");
			btnNextPage.setActionCommand("下一页");
			btnNextPage.setToolTipText("下一页是第"+(selectNum+1<=sumPage?selectNum+1:sumPage)+"页");
			btnNextPage.addActionListener(new BottomPageButtonAction());
			pageBtns.add(btnNextPage);
		}
		pageBtns.add(btnLastPage);
		con.validate();	
		this.add(pageBtns);
					
	}
	
	// 页码事件处理
	class BottomPageButtonAction implements ActionListener
	{

		int btnNumText =0;
		BottomPageButtonAction(){
			
		}
		BottomPageButtonAction(int num){
			btnNumText = num;
		}
		@Override
		public void actionPerformed(ActionEvent e)
		{
			String command = e.getActionCommand();
			System.out.println(command);
			if(command.equals("首页")){ // 
				setPageBottom(1); // 首页就是第一页,所以直接传个1
				currentPage =1;
			}else if(command.equals("上一页")){
				setPageBottom(currentPage-1>=1?--currentPage:1);
			}else if(command.equals("下一页")){
				setPageBottom(currentPage+1<=sumPage?++currentPage:sumPage);
				
			}else if(command.equals("末页")){
				setPageBottom(sumPage); // 末页是最后的页数
				currentPage = sumPage;
			}else if(command.equals("数字")){
				setPageBottom(btnNumText);
				currentPage = btnNumText;
			}
			System.out.println("当前是第 "+currentPage+"页");
		}
		
	}

	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		new PageNumDemo();
	}

}


小功能简单实现了下,代码里注释很清楚了,JFrame里添加一个Jpanel,Jpanel里添加相应的JButton,由于Jpanel是流布局,所以Button在被添加时一定要按顺序添加。

源码在这里

你可能感兴趣的:(仿网页分页页码)