`

JList List<E> Page 分页

 
阅读更多

package view.retrieve.comps.center;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.ListModel;

/**
 * @Description
 * @Author zhangzuoqiang
 * @Date 2012-3-30 | 下午9:28:05
 */
public class PaginatedList extends JPanel {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public static void main(String args[]) throws Exception {

		// create 100 elements of dummy data.
		Integer[] data = new Integer[100];
		for (int i = 0; i < data.length; i++) {
			data[i] = i + 1;
		}

		// create a paginated list with page size 20
		PaginatedList list = new PaginatedList(new JList(data), 20);

		// add it to a frame
		JFrame f = new JFrame();
		f.add(list);
		f.setSize(100, 100);
		f.pack();
		f.setVisible(true);
	}

	private final int pageSize;
	private final JList list;
	private final ListModel model;

	private final int lastPageNum;
	private int currPageNum;
	private JLabel countLabel;
	private JButton first, prev, next, last;

	/**
	 * @param list
	 *            the jlist
	 * @param pageSize
	 *            the number of rows visible in the jlist
	 */
	public PaginatedList(JList list, int pageSize) {
		super();
		this.pageSize = pageSize;
		this.list = list;
		this.model = list.getModel();

		// work out how many pages there are
		this.lastPageNum = model.getSize() / pageSize
				+ (model.getSize() % pageSize != 0 ? 1 : 0);
		this.currPageNum = 1;

		setLayout(new BorderLayout());
		countLabel = new JLabel();
		add(countLabel, BorderLayout.NORTH);
		add(list, BorderLayout.CENTER);
		add(createControls(), BorderLayout.SOUTH);
		updatePage();
	}

	private JPanel createControls() {
		first = new JButton(new AbstractAction("<<") {
			/**
			 * 
			 */
			private static final long serialVersionUID = 1L;

			public void actionPerformed(ActionEvent e) {
				currPageNum = 1;
				updatePage();
			}
		});

		prev = new JButton(new AbstractAction("<") {
			/**
			 * 
			 */
			private static final long serialVersionUID = 1L;

			public void actionPerformed(ActionEvent e) {
				if (--currPageNum <= 0)
					currPageNum = 1;
				updatePage();
			}
		});

		next = new JButton(new AbstractAction(">") {
			/**
			 * 
			 */
			private static final long serialVersionUID = 1L;

			public void actionPerformed(ActionEvent e) {
				if (++currPageNum > lastPageNum)
					currPageNum = lastPageNum;
				updatePage();

			}
		});

		last = new JButton(new AbstractAction(">>") {
			/**
			 * 
			 */
			private static final long serialVersionUID = 1L;

			public void actionPerformed(ActionEvent e) {
				currPageNum = lastPageNum;
				updatePage();
			}
		});

		JPanel bar = new JPanel(new GridLayout(1, 4));
		bar.add(first);
		bar.add(prev);
		bar.add(next);
		bar.add(last);
		return bar;
	}

	private void updatePage() {

		// replace the list's model with a new model containing
		// only the entries in the current page.
		final DefaultListModel page = new DefaultListModel();
		final int start = (currPageNum - 1) * pageSize;
		int end = start + pageSize;
		if (end >= model.getSize()) {
			end = model.getSize();
		}
		for (int i = start; i < end; i++) {
			page.addElement(model.getElementAt(i));
		}
		list.setModel(page);

		// update the label
		countLabel.setText("Page " + currPageNum + "/" + lastPageNum);

		// update buttons
		final boolean canGoBack = currPageNum != 1;
		final boolean canGoFwd = currPageNum != lastPageNum;
		first.setEnabled(canGoBack);
		prev.setEnabled(canGoBack);
		next.setEnabled(canGoFwd);
		last.setEnabled(canGoFwd);
	}
}
 
分享到:
评论

相关推荐

    List转换成String数组

    - `list.toArray(new String[list.size()])`将`List&lt;String&gt;`中的所有元素复制到新创建的字符串数组中。 **方法二:简化版toArray()方法** ```java List&lt;String&gt; list = new ArrayList&lt;String&gt;(); list.add("a1");...

    JList 上下左右拖动

    JList&lt;String&gt; list = new JList&lt;&gt;(model); ``` 要实现上下左右拖动,我们需要使用`MouseMotionListener`来监听鼠标移动事件。`JList`本身并不直接支持这样的操作,但我们可以模拟这个行为。以下是一个简单的实现:...

    jlist类模板

    example : JList&lt;type&gt; test; eg1 : JList&lt;int&gt; test; eg2 : JList&lt;struct&gt; test; eg2 : JList&lt;class&gt; test;

    Java Swing组件:Jlist学习笔记

    JList&lt;String&gt; list1 = new JList&lt;&gt;(items); // 通过 Vector 初始化 Vector&lt;String&gt; v = new Vector&lt;&gt;(); v.add("选项1"); v.add("选项2"); v.add("选项3"); JList&lt;String&gt; list2 = new JList&lt;&gt;(v); ``` 2...

    JAVA JList使用例子

    JList&lt;String&gt; list = new JList&lt;&gt;(items); ``` 在这个例子中,`items`数组定义了`JList`要显示的元素,`new JList&lt;&gt;(items)`创建了一个新的`JList`实例,并用这些元素填充了列表。 为了使`JList`可以在屏幕空间...

    html 标记大全.rar

    在`&lt;head&gt;`中,你可以设置元信息,如页面标题(`&lt;title&gt;`),而在`&lt;body&gt;`中则包含实际的网页内容。 HTML标记有多种类型,分为单标签(例如`&lt;br&gt;`用于换行)和双标签(例如`&lt;p&gt;`用于段落)。常见的标记包括: 1. `...

    java列表框应用

    JList&lt;String&gt; list = new JList&lt;&gt;(new String[]{"item1", "item2", "item3"}); JScrollPane scrollPane = new JScrollPane(list); ``` #### 五、选择模式设置 `JList`支持不同的选择模式,可以根据实际需求进行...

    JList事件监听器的实现例子

    JList&lt;String&gt; list = new JList&lt;&gt;(model); list.addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { if (!e.getValueIsAdjusting()) { // ...

    Java Swing JList列表框的实现

    final JList&lt;String&gt; list = new JList&lt;String&gt;(); list.setPreferredSize(new Dimension(200, 100)); list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); list.addListSelectionListener(new ...

    java swing带复选框的JList控件

    JList&lt;String&gt; jList = new JList&lt;&gt;(model); ``` 3. **创建自定义的 `ListCellRenderer`**: 我们需要创建一个实现 `ListCellRenderer` 接口的类,以便在每个列表项前添加复选框。下面是一个简单的示例: ```...

    万年历的代码

    &lt;div id='jlist' class='YJdiv'&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div id='festival_detail_str'&gt;1月22日至1月28日放假7天,1月21日(星期六)、1月29日(星期日)上班。&lt;/div&gt; &lt;div id='cal_...

    JList动态改变图片

    JList&lt;ImageInfo&gt; jList = new JList&lt;&gt;(new ImageListModel()); jList.setCellRenderer(new ImageRenderer()); ``` 5. **事件监听** 为了响应用户选择图片或执行其他操作,可以添加`ListSelectionListener`到`...

    JList中使用JCheckBox示例

    JList&lt;JCheckBox&gt; myList = new JList&lt;&gt;(new MyListModel()); myList.setCellRenderer(new MyListCellRenderer()); ``` 为了响应用户的交互,我们需要添加一个`MouseListener`到`JList`,监听点击事件以更新选中...

    java_swing_更酷的Jlist.

    JList&lt;IconListItem&gt; list = new JList&lt;&gt;(listModel); list.setCellRenderer(new IconListItemRenderer()); // 添加到 JFrame 或其他容器中 JFrame frame = new JFrame("JList with Icons"); frame.add(new ...

    动态的填充列表框和组合框

    JList&lt;String&gt; list = new JList&lt;&gt;(model); ``` JavaFX的`ComboBox`使用`.getItems()`方法: ```java ComboBox&lt;String&gt; comboBox = new ComboBox&lt;&gt;(); comboBox.getItems().addAll("Option 1", "Option 2", // 更...

    JList的一些用法

    JList&lt;String&gt; wordList = new JList&lt;&gt;(words); ``` 然而,`JList`的灵活性远不止于此,它支持多列显示,这是通过调用`setLayoutOrientation`方法实现的。默认情况下,`JList`的布局方向为`VERTICAL`,即垂直方向...

    JList多选值的获取

    monthList = new JList&lt;&gt;(months); monthList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); // 设置多选模式 monthList.setFixedCellHeight(20); monthList.setVisibleRowCount(6); ...

    自定义JList

    customList.setModel(new DefaultListModel&lt;&gt;()); customList.getModel().addElement(new CustomListCell.ListItem("Item 1")); customList.getModel().addElement(new CustomListCell.ListItem("Item 2")); ...

    swing checkCombox

    private List&lt;String&gt; selectedItems = new ArrayList&lt;&gt;(); public MultiSelectComboBox(String[] items) { super(new MultiSelectComboBoxModel(items)); setRenderer(new MultiSelectComboBoxRenderer()); }...

    一个简单Swing列表带图标的项目

    JList&lt;ImgListItem&gt; list = new JList&lt;&gt;(model); ``` 为了显示图标,我们需要实现ListCellRenderer。这个渲染器决定了列表项在视觉上如何呈现。我们可以创建一个继承自DefaultListCellRenderer的类,并重写`...

Global site tag (gtag.js) - Google Analytics