本文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在被添加时一定要按顺序添加。
源码在这里