⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jpagination.java

📁 Document will be uploaded soon
💻 JAVA
📖 第 1 页 / 共 2 页
字号:

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 + -