自动分页的面板制作|QQ面板|java|Swing

本来以为写一个这样的面板会很费劲,一开始准备改写一个Swing中的布局管理起来完成这样的面板,但经过仔细考虑还有很多不适合的地方。于是还是使用ComponentListener监听面板大小变化写了一个比较通用的翻页面板先来看看样子。

似乎不太好看但已经能够完成翻页的任务了,还需要进一步的改进来看看代码是怎样的吧!

package com.flyingwind.tutorial; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Container; import java.awt.Dimension; import java.awt.Image; import java.awt.event.ComponentEvent; import java.awt.event.ComponentListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.imageio.ImageIO; import javax.swing.BoxLayout; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class SplitPagePanel extends JPanel implements ComponentListener { private JPanel bodyPanel=new JPanel(); private JPanel leftPanel=new JPanel(); private JPanel rightPanel=new JPanel(); private JPanel topPanel=new JPanel(); private JPanel downPanel=new JPanel(); //分页类 private PageResultSet pageResultSet; //Button集合 private List list=new ArrayList(); // 页大小 private int pageSize=1; //方向 public int axis; JLabel fangxiangButton; JLabel fangxiangButton2; JLabel fangxiangButton3; JLabel fangxiangButton4; Image fangxiang; Image fangxiang2; Image fangxiang3; Image fangxiang4; public SplitPagePanel(int axis){ //设置上下左右4个方向的按钮图标 try { fangxiang=ImageIO.read(new File("images/fangxiang.gif")); fangxiang2=ImageIO.read(new File("images/fangxiang2.gif")); fangxiang3=ImageIO.read(new File("images/fangxiang4.gif")); fangxiang4=ImageIO.read(new File("images/fangxiang3.gif")); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } //设置面板布局 setLayout(new BorderLayout()); this.axis=axis; //设置工具栏布局 bodyPanel.setLayout(new BoxLayout(bodyPanel, axis)); leftPanel.setLayout(new BoxLayout(leftPanel, axis)); rightPanel.setLayout(new BoxLayout(rightPanel, axis)); topPanel.setLayout(new BoxLayout(topPanel, axis)); downPanel.setLayout(new BoxLayout(downPanel, axis)); //分别将面板放置到合适的位置 this.add(topPanel,BorderLayout.NORTH); this.add(downPanel,BorderLayout.SOUTH); this.add(leftPanel,BorderLayout.WEST); this.add(rightPanel,BorderLayout.EAST); this.add(bodyPanel,BorderLayout.CENTER); //加入对面板改变监听 this.addComponentListener(this); } /** * 添加按钮 * @param container */ public void addButton(Container container){ list.add(container); } /** * 删除一个按钮 * @param container */ public void removeButton(Container container){ list.remove(container); } /** * 删除按钮 * @param index */ public void removeButton(int index){ list.remove(index); } /** * 清空所有按钮 */ public void clreanButton(){ list.clear(); } /** * 获取按钮列表 * @return */ public List getButtons(){ return list; } /** * 设置分页 */ public void setPageResultSet(List lists){ pageResultSet=new PageResultSet(lists,1,pageSize); } @Override public void componentHidden(ComponentEvent e) { // TODO Auto-generated method stub } @Override public void componentMoved(ComponentEvent e) { // TODO Auto-generated method stub } @Override public void componentResized(ComponentEvent e) { if(BoxLayout.X_AXIS==this.axis){ int width=bodyPanel.getSize().width;//获取面板宽度 int targtWidth=0; int pageNum=list.size(); for(int i=0;i=width-5){ pageNum=i; if (!leftPanel.isAncestorOf(fangxiangButton)) { fangxiangButton = new JLabel(new ImageIcon(fangxiang)); fangxiangButton.addMouseListener(new MouseAdapter() { public void mouseReleased(MouseEvent e) { if (pageResultSet != null) { pageResultSet.setCurPage(pageResultSet.previous()); showButton(); } } }); leftPanel.add(fangxiangButton); leftPanel.doLayout(); } if (!rightPanel.isAncestorOf(fangxiangButton2)) { fangxiangButton2 = new JLabel(new ImageIcon(fangxiang2)); fangxiangButton2.addMouseListener(new MouseAdapter() { public void mouseReleased(MouseEvent e) { if (pageResultSet != null) { pageResultSet.setCurPage(pageResultSet.next()); showButton(); } } }); rightPanel.add(fangxiangButton2); rightPanel.doLayout(); } break; } } if (pageResultSet != null) { pageResultSet.setPageSize(pageNum); pageResultSet.setCurPage(pageResultSet.first()); System.out.println(pageResultSet.getPageCount()); showButton(); } }else if(BoxLayout.Y_AXIS==this.axis){ int height=bodyPanel.getSize().height;//获取面板高度 int targtHeight=0; int pageNum=list.size();//初始化页面内容数量 for(int i=0;i=height-5){//如果累加的高度大于面板的高度 pageNum=i;//则页面只能显示i个内容 if (!topPanel.isAncestorOf(fangxiangButton3)) { fangxiangButton3 = new JLabel(new ImageIcon(fangxiang3)); fangxiangButton3.addMouseListener(new MouseAdapter() { public void mouseReleased(MouseEvent e) { if (pageResultSet != null) { pageResultSet.setCurPage(pageResultSet.previous()); showButton(); } } }); topPanel.add(fangxiangButton3); topPanel.doLayout(); } if (!downPanel.isAncestorOf(fangxiangButton4)) { fangxiangButton4 = new JLabel(new ImageIcon(fangxiang4)); fangxiangButton4.addMouseListener(new MouseAdapter() { public void mouseReleased(MouseEvent e) { if (pageResultSet != null) { pageResultSet.setCurPage(pageResultSet.next()); showButton(); } } }); downPanel.add(fangxiangButton4); downPanel.doLayout(); } break; } } if (pageResultSet != null) { pageResultSet.setPageSize(pageNum); pageResultSet.setCurPage(pageResultSet.getCurPage()); showButton(); } } } /** * 显示按钮 */ public void showButton(){ bodyPanel.removeAll();//先清空bodyPanel面板所有按钮 //判断当前页是否在第一页 if(pageResultSet.getCurPage()==pageResultSet.first()){ //如果是则清除左边面板内容和上方面板内容 leftPanel.removeAll(); leftPanel.doLayout(); topPanel.removeAll(); topPanel.doLayout(); }else{ //判断页面内容布局方向 if (BoxLayout.X_AXIS == this.axis) {//如果是X轴方向 //清除下方面板内容和上方面板内容 downPanel.removeAll(); downPanel.doLayout(); topPanel.removeAll(); topPanel.doLayout(); //判断左方面板是否有内容 if (!leftPanel.isAncestorOf(fangxiangButton)) { //如果没有则添加左边按钮 fangxiangButton = new JLabel(new ImageIcon(fangxiang)); fangxiangButton.addMouseListener(new MouseAdapter() { public void mouseReleased(MouseEvent e) { if (pageResultSet != null) { pageResultSet.setCurPage(pageResultSet .previous()); showButton(); } } }); leftPanel.add(fangxiangButton); leftPanel.doLayout(); } } //判断页面内容布局方向 if(BoxLayout.Y_AXIS==this.axis){//如果是Y轴方向 //清除左方面板内容和右方面板内容 leftPanel.removeAll(); leftPanel.doLayout(); rightPanel.removeAll(); rightPanel.doLayout(); //判断上方面板是否有内容 if (!topPanel.isAncestorOf(fangxiangButton3)) { //如果没有则添加上边按钮 fangxiangButton3 = new JLabel(new ImageIcon(fangxiang3)); fangxiangButton3.addMouseListener(new MouseAdapter() { public void mouseReleased(MouseEvent e) { if (pageResultSet != null) { pageResultSet.setCurPage(pageResultSet.previous()); showButton(); } } }); topPanel.add(fangxiangButton3); topPanel.doLayout(); } } } //判断当前页是否在最后一页 if(pageResultSet.getCurPage()==pageResultSet.last()){ //如果是则清除右边面板内容和下方面板内容 rightPanel.removeAll(); rightPanel.doLayout(); downPanel.removeAll(); downPanel.doLayout(); }else{ //判断页面内容布局方向 if (BoxLayout.X_AXIS == this.axis) {//如果是X轴方向 //清除下方面板内容和上方面板内容 downPanel.removeAll(); downPanel.doLayout(); topPanel.removeAll(); topPanel.doLayout(); //判断右方面板是否有内容 if (!rightPanel.isAncestorOf(fangxiangButton2)) { fangxiangButton2 = new JLabel(new ImageIcon(fangxiang2)); fangxiangButton2.addMouseListener(new MouseAdapter() { public void mouseReleased(MouseEvent e) { if (pageResultSet != null) { pageResultSet.setCurPage(pageResultSet.next()); showButton(); } } }); rightPanel.add(fangxiangButton2); rightPanel.doLayout(); } } //判断页面内容布局方向 if(BoxLayout.Y_AXIS==this.axis){//如果是Y轴方向 //清除左方面板内容和右方面板内容 leftPanel.removeAll(); leftPanel.doLayout(); rightPanel.removeAll(); rightPanel.doLayout(); //判断右方面板是否有内容 if (!downPanel.isAncestorOf(fangxiangButton4)) { fangxiangButton4 = new JLabel(new ImageIcon(fangxiang4)); fangxiangButton4.addMouseListener(new MouseAdapter() { public void mouseReleased(MouseEvent e) { if (pageResultSet != null) { pageResultSet.setCurPage(pageResultSet.next()); showButton(); } } }); downPanel.add(fangxiangButton4); downPanel.doLayout(); } } } List button=(List) pageResultSet.getData(); for(int i=0;i

如果对java界面方面有兴趣的朋友欢迎加入4601398QQ群。

你可能感兴趣的:(JAVA,java,qq,file,null,image,list)