📄 jpagination.java
字号:
package com.component.pagination;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.Iterator;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.event.EventListenerList;
import org.jdesktop.swingx.JXHyperlink;
import org.jdesktop.swingx.JXPanel;
import com.component.Cab2bHyperlink;
/**
* A Swing component to perform pagination of long list of user data.
* This component is designed to simulate the Browser kind of pagination
* of search results.
*
* This component can be an alternative the ScrollPane component, with different
* technique to display a long list of user data.
*
* List of Property Change Listeners implemented and working.
* 1) isSelectable
* 2) isGroupActionEnabled // TODO this should automatically get disabled if isSelectable is disabled.
* 3) elementsPerPage
*
* @author chetan_bh
*/
public class JPagination extends JXPanel implements PropertyChangeListener
{
/**
* A boolean to set selection feature enabled or disabled.
*/
private boolean isSelectable = true;
/**
* A boolean to set group actions set displayed or not displayed.
*/
private boolean isGroupActionEnabled = true;
/**
* A model to hold user data.
*/
PaginationModel paginationModel;
/**
* A Panel to display some common action elements like "Select All", "Clear All", etc.
*/
JGroupActionPanel groupActionPanel;
/**
* A Panel to display the page indexes, for user to navigate through the data using
* these indices.
*/
JPageBar pageBar;
/**
* A Panel to display the page elements.
*/
JXPanel pagePanel;
/**
* TODO This should be a actionListenerList, so that many listener can register
* to listen for page element actions.
*/
ActionListener actionListener;
/**
* A selection model for the entire <code>JPagination</code> component.
*/
PageSelectionModel pageSelectionModel;
/**
* A selection listener for the page element selections.
*/
PageSelectionListener pageSelectionListener;
// TODO Yet to implement.
private int pageLayoutOrientation = PaginationConstants.DEFAULT_PAGE_ORIENTATION;
/**
* How to layout the pageElements in the page panel, defaults to <code>VERTICAL</code>.
*/
private Dimension pageDimension = new Dimension(-1, Integer.MAX_VALUE);
// -1 indicating invalid and MAX_VALUE indicating infinite.
@Deprecated
protected EventListenerList listenerList = new EventListenerList();
Component parentComponent;
/**
* Auto-Resize will not work for Alphabetic Pager.
*/
boolean automaticPageResize = false;
public JPagination()
{
this(null);
}
public JPagination(Vector<PageElement> data)
{
this(data, new NumericPager(data));
}
public JPagination(Vector<PageElement> data, Pager pager)
{
this(data, pager, null, false);
}
public JPagination(Vector<PageElement> data, Pager pager, Component parentComponent,
boolean autoPageResize)
{
paginationModel = new PaginationModel(data, pager);
// TODO this code should be moved to initGUI() function, since it is a GUI initialization.
//pageBar = new JPageBar(pager.getAllPageIndices(), new Vector(), this);
pageSelectionModel = createSelectionModel();
if (parentComponent == null)
{
automaticPageResize = false;
}
else
{
this.automaticPageResize = autoPageResize;
this.parentComponent = parentComponent;
parentComponent.addComponentListener(new PaginationComponentListener());
}
initGUI();
}
private PageSelectionModel createSelectionModel()
{
return (new DefaultPageSelectionModel());
}
private void initGUI()
{
this.removeAll();
//this.setLayout(new VerticalLayout(5));
pageBar = new JPageBar(paginationModel.pager.getAllPageIndices(), new Vector(), this);
this.addPropertyChangeListener(this);
//setPreferredSize(new Dimension(300,450));
setLayout(new BorderLayout());
if (isGroupActionEnabled)
{
groupActionPanel = new JGroupActionPanel();
add(groupActionPanel, BorderLayout.NORTH);
//this.add(groupActionPanel);
}
pagePanel = getPagePanel(paginationModel.firstPage());
if(automaticPageResize)
pagePanel.addComponentListener(new PaginationComponentListener());
add(pagePanel, BorderLayout.CENTER);
//this.add(pagePanel);
add(pageBar, BorderLayout.SOUTH);
//this.add(pageBar);
}
public void setPrefSize(Dimension preferredSize)
{
super.setPreferredSize(preferredSize);
}
public Dimension getPrefSize()
{
return this.getPreferredSize();
}
/**
* Returns a Panel which is embedded with page element components represneting the a page.
* @param pageElements a vector of page elements also called as page.
* @return a page panel.
*
* TODO this function should now take into account pageLayoutOrientation and pageDimension
* attributes into account while laying out page elements in the page panel.
*
*/
public JXPanel getPagePanel(Vector<PageElement> pageElements)
{
JXPanel pagePanel = new JXPanel();
String currentPageIndex = paginationModel.getCurrentPageIndex();
//pagePanel.setLayout(new VerticalLayout(8));
pagePanel.setLayout(new RiverLayout(0, 8));
Iterator iter = pageElements.iterator();
while (iter.hasNext())
{
PageElement element = (PageElement) iter.next();
int indexInPage = pageElements.indexOf(element);
PageElementIndex pageElementIndex = new PageElementIndex(currentPageIndex, indexInPage);
JPageElement pageElementPanel = new JPageElement(this, element, isSelectable,
pageElementIndex);
pageElementPanel.setHyperlinkActionListener(this.actionListener);
pagePanel.add("br", pageElementPanel);
}
if(automaticPageResize)
pagePanel.addComponentListener(new PaginationComponentListener());
return pagePanel;
}
public void setPageElementActionListener(ActionListener actionListener)
{
this.actionListener = actionListener;
changePageElementActionListener(this.actionListener);
}
private void changePageElementActionListener(ActionListener ae)
{
for (int i = 0; i < pagePanel.getComponentCount(); i++)
{
JPageElement pageElementComp = (JPageElement) pagePanel.getComponent(i);
pageElementComp.setHyperlinkActionListener(ae);
}
}
//TODO This looks like not conforming to JavaBeans standards
// This should set actionlisteners of each pageelements actionlistener to null
// Just like previous function.
public void removePageElementActionListener()
{
actionListener = null;
}
/**
* Gets the current action listener.
* @return
*/
public ActionListener getPageElementActionListner()
{
return actionListener;
}
/**
* A method to change the current page panel to a new page panel.
* @param newPagePanel
*/
public void changePagePanel(JXPanel newPagePanel)
{
this.remove(pagePanel);
this.pagePanel = newPagePanel;
this.add(pagePanel);
this.updateUI();
}
/**
* Returns the current pagination model.
* @return
*/
public PaginationModel getPaginationModel()
{
return paginationModel;
}
/**
* Sets the pagination model to new one.
* @param paginationModel new pagination model
*/
public void setPaginationModel(PaginationModel paginationModel)
{
PaginationModel oldValue = this.paginationModel;
this.paginationModel = paginationModel;
firePropertyChange("paginationModel", oldValue, this.paginationModel);
}
/**
* Changes the pager in the pagination model.
* @param newPager new pager.
*/
public void changePager(Pager newPager)
{
Pager oldValue = null; //paginationModel.getPa
paginationModel.changePager(newPager);
firePropertyChange("pager", oldValue, newPager);
}
/**
* Returns the current <code>PageSelectionModel</code>.
* @return
*/
public PageSelectionModel getPageSelectionModel()
{
return pageSelectionModel;
}
/**
* Sets a new <code>PageSelectionModel</code>.
* @param pageSelectionModel new page selection model.
*/
public void setPageSelectionModel(PageSelectionModel pageSelectionModel)
{
PageSelectionModel oldValue = this.pageSelectionModel;
this.pageSelectionModel = pageSelectionModel;
firePropertyChange("pageSelectionModel", oldValue, pageSelectionModel);
}
/**
* Returns true if selection is enabled, else false.
* @return
*/
public boolean isSelectable()
{
return isSelectable;
}
/**
* Enables/Diables selections of the page elements.
* @param newValue
*/
public void setSelectableEnabled(boolean newValue)
{
if (newValue != this.isSelectable)
{
Boolean oldValue = isSelectable;
this.isSelectable = newValue;
firePropertyChange("isSelectable", oldValue, new Boolean(newValue));
}
}
/**
* Enables/Disables group action panel.
* @param newValue
*/
public void setGroupActionEnabled(boolean newValue)
{
if (newValue != this.isGroupActionEnabled)
{
Boolean oldValue = this.isGroupActionEnabled;
this.isGroupActionEnabled = newValue;
firePropertyChange("isGroupActionEnabled", oldValue, new Boolean(newValue));
}
}
/**
* Sets element per page parameter.
* @param newValue
*/
public void setElementsPerPage(int newValue)
{
int oldValue = paginationModel.getElementsPerPage();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -