📄 basiclistui.java
字号:
public void contentsChanged(ListDataEvent e) { getHandler().contentsChanged(e); } } /** * Creates an instance of ListDataListener that's added to * the JLists by model as needed. Subclasses can override * this method to return a custom ListDataListener, e.g. * <pre> * class MyListUI extends BasicListUI { * protected ListDataListener <b>createListDataListener</b>() { * return new MyListDataListener(); * } * public class MyListDataListener extends ListDataHandler { * public void contentsChanged(ListDataEvent e) { * // do some extra work when the models contents change * super.contentsChange(e); * } * } * } * </pre> * * @see ListDataListener * @see JList#getModel * @see #installUI */ protected ListDataListener createListDataListener() { return getHandler(); } /** * The PropertyChangeListener that's added to the JList at * installUI time. When the value of a JList property that * affects layout changes, we set a bit in updateLayoutStateNeeded. * If the JLists model changes we additionally remove our listeners * from the old model. Likewise for the JList selectionModel. * <p> * <strong>Warning:</strong> * Serialized objects of this class will not be compatible with * future Swing releases. The current serialization support is * appropriate for short term storage or RMI between applications running * the same version of Swing. As of 1.4, support for long term storage * of all JavaBeans<sup><font size="-2">TM</font></sup> * has been added to the <code>java.beans</code> package. * Please see {@link java.beans.XMLEncoder}. * * @see #maybeUpdateLayoutState * @see #createPropertyChangeListener * @see #installUI */ public class PropertyChangeHandler implements PropertyChangeListener { public void propertyChange(PropertyChangeEvent e) { getHandler().propertyChange(e); } } /** * Creates an instance of PropertyChangeHandler that's added to * the JList by installUI(). Subclasses can override this method * to return a custom PropertyChangeListener, e.g. * <pre> * class MyListUI extends BasicListUI { * protected PropertyChangeListener <b>createPropertyChangeListener</b>() { * return new MyPropertyChangeListener(); * } * public class MyPropertyChangeListener extends PropertyChangeHandler { * public void propertyChange(PropertyChangeEvent e) { * if (e.getPropertyName().equals("model")) { * // do some extra work when the model changes * } * super.propertyChange(e); * } * } * } * </pre> * * @see PropertyChangeListener * @see #installUI */ protected PropertyChangeListener createPropertyChangeListener() { return getHandler(); } /** Used by IncrementLeadSelectionAction. Indicates the action should * change the lead, and not select it. */ private static final int CHANGE_LEAD = 0; /** Used by IncrementLeadSelectionAction. Indicates the action should * change the selection and lead. */ private static final int CHANGE_SELECTION = 1; /** Used by IncrementLeadSelectionAction. Indicates the action should * extend the selection from the anchor to the next index. */ private static final int EXTEND_SELECTION = 2; private static class Actions extends UIAction { private static final String SELECT_PREVIOUS_COLUMN = "selectPreviousColumn"; private static final String SELECT_PREVIOUS_COLUMN_EXTEND = "selectPreviousColumnExtendSelection"; private static final String SELECT_PREVIOUS_COLUMN_CHANGE_LEAD = "selectPreviousColumnChangeLead"; private static final String SELECT_NEXT_COLUMN = "selectNextColumn"; private static final String SELECT_NEXT_COLUMN_EXTEND = "selectNextColumnExtendSelection"; private static final String SELECT_NEXT_COLUMN_CHANGE_LEAD = "selectNextColumnChangeLead"; private static final String SELECT_PREVIOUS_ROW = "selectPreviousRow"; private static final String SELECT_PREVIOUS_ROW_EXTEND = "selectPreviousRowExtendSelection"; private static final String SELECT_PREVIOUS_ROW_CHANGE_LEAD = "selectPreviousRowChangeLead"; private static final String SELECT_NEXT_ROW = "selectNextRow"; private static final String SELECT_NEXT_ROW_EXTEND = "selectNextRowExtendSelection"; private static final String SELECT_NEXT_ROW_CHANGE_LEAD = "selectNextRowChangeLead"; private static final String SELECT_FIRST_ROW = "selectFirstRow"; private static final String SELECT_FIRST_ROW_EXTEND = "selectFirstRowExtendSelection"; private static final String SELECT_FIRST_ROW_CHANGE_LEAD = "selectFirstRowChangeLead"; private static final String SELECT_LAST_ROW = "selectLastRow"; private static final String SELECT_LAST_ROW_EXTEND = "selectLastRowExtendSelection"; private static final String SELECT_LAST_ROW_CHANGE_LEAD = "selectLastRowChangeLead"; private static final String SCROLL_UP = "scrollUp"; private static final String SCROLL_UP_EXTEND = "scrollUpExtendSelection"; private static final String SCROLL_UP_CHANGE_LEAD = "scrollUpChangeLead"; private static final String SCROLL_DOWN = "scrollDown"; private static final String SCROLL_DOWN_EXTEND = "scrollDownExtendSelection"; private static final String SCROLL_DOWN_CHANGE_LEAD = "scrollDownChangeLead"; private static final String SELECT_ALL = "selectAll"; private static final String CLEAR_SELECTION = "clearSelection"; // add the lead item to the selection without changing lead or anchor private static final String ADD_TO_SELECTION = "addToSelection"; // toggle the selected state of the lead item and move the anchor to it private static final String TOGGLE_AND_ANCHOR = "toggleAndAnchor"; // extend the selection to the lead item private static final String EXTEND_TO = "extendTo"; // move the anchor to the lead and ensure only that item is selected private static final String MOVE_SELECTION_TO = "moveSelectionTo"; Actions(String name) { super(name); } public void actionPerformed(ActionEvent e) { String name = getName(); JList list = (JList)e.getSource(); BasicListUI ui = (BasicListUI)BasicLookAndFeel.getUIOfType( list.getUI(), BasicListUI.class); if (name == SELECT_PREVIOUS_COLUMN) { changeSelection(list, CHANGE_SELECTION, getNextColumnIndex(list, ui, -1), true); } else if (name == SELECT_PREVIOUS_COLUMN_EXTEND) { changeSelection(list, EXTEND_SELECTION, getNextColumnIndex(list, ui, -1), true); } else if (name == SELECT_PREVIOUS_COLUMN_CHANGE_LEAD) { changeSelection(list, CHANGE_LEAD, getNextColumnIndex(list, ui, -1), true); } else if (name == SELECT_NEXT_COLUMN) { changeSelection(list, CHANGE_SELECTION, getNextColumnIndex(list, ui, 1), true); } else if (name == SELECT_NEXT_COLUMN_EXTEND) { changeSelection(list, EXTEND_SELECTION, getNextColumnIndex(list, ui, 1), true); } else if (name == SELECT_NEXT_COLUMN_CHANGE_LEAD) { changeSelection(list, CHANGE_LEAD, getNextColumnIndex(list, ui, 1), true); } else if (name == SELECT_PREVIOUS_ROW) { changeSelection(list, CHANGE_SELECTION, getNextIndex(list, ui, -1), true); } else if (name == SELECT_PREVIOUS_ROW_EXTEND) { changeSelection(list, EXTEND_SELECTION, getNextIndex(list, ui, -1), true); } else if (name == SELECT_PREVIOUS_ROW_CHANGE_LEAD) { changeSelection(list, CHANGE_LEAD, getNextIndex(list, ui, -1), true); } else if (name == SELECT_NEXT_ROW) { changeSelection(list, CHANGE_SELECTION, getNextIndex(list, ui, 1), true); } else if (name == SELECT_NEXT_ROW_EXTEND) { changeSelection(list, EXTEND_SELECTION, getNextIndex(list, ui, 1), true); } else if (name == SELECT_NEXT_ROW_CHANGE_LEAD) { changeSelection(list, CHANGE_LEAD, getNextIndex(list, ui, 1), true); } else if (name == SELECT_FIRST_ROW) { changeSelection(list, CHANGE_SELECTION, 0, true); } else if (name == SELECT_FIRST_ROW_EXTEND) { changeSelection(list, EXTEND_SELECTION, 0, true); } else if (name == SELECT_FIRST_ROW_CHANGE_LEAD) { changeSelection(list, CHANGE_LEAD, 0, true); } else if (name == SELECT_LAST_ROW) { changeSelection(list, CHANGE_SELECTION, list.getModel().getSize() - 1, true); } else if (name == SELECT_LAST_ROW_EXTEND) { changeSelection(list, EXTEND_SELECTION, list.getModel().getSize() - 1, true); } else if (name == SELECT_LAST_ROW_CHANGE_LEAD) { changeSelection(list, CHANGE_LEAD, list.getModel().getSize() - 1, true); } else if (name == SCROLL_UP) { scroll(list, CHANGE_SELECTION, true); } else if (name == SCROLL_UP_EXTEND) { scroll(list, EXTEND_SELECTION, true); } else if (name == SCROLL_UP_CHANGE_LEAD) { scroll(list, CHANGE_LEAD, true); } else if (name == SCROLL_DOWN) { scroll(list, CHANGE_SELECTION, false); } else if (name == SCROLL_DOWN_EXTEND) { scroll(list, EXTEND_SELECTION, false); } else if (name == SCROLL_DOWN_CHANGE_LEAD) { scroll(list, CHANGE_LEAD, false); } else if (name == SELECT_ALL) { selectAll(list); } else if (name == CLEAR_SELECTION) { clearSelection(list); } else if (name == ADD_TO_SELECTION) { int index = list.getSelectionModel().getLeadSelectionIndex(); if (!list.isSelectedIndex(index)) { int oldAnchor = list.getSelectionModel().getAnchorSelectionIndex(); list.setValueIsAdjusting(true); list.addSelectionInterval(index, index); list.getSelectionModel().setAnchorSelectionIndex(oldAnchor); list.setValueIsAdjusting(false); } } else if (name == TOGGLE_AND_ANCHOR) { int index = list.getSelectionModel().getLeadSelectionIndex(); if (list.isSelectedIndex(index)) { list.removeSelectionInterval(index, index); } else { list.addSelectionInterval(index, index); } } else if (name == EXTEND_TO) { changeSelection(list, EXTEND_SELECTION, list.getSelectionModel().getLeadSelectionIndex(), false); } else if (name == MOVE_SELECTION_TO) { changeSelection(list, CHANGE_SELECTION, list.getSelectionModel().getLeadSelectionIndex(), false); } } public boolean isEnabled(Object c) { Object name = getName(); if (name == SELECT_PREVIOUS_COLUMN_CHANGE_LEAD || name == SELECT_NEXT_COLUMN_CHANGE_LEAD || name == SELECT_PREVIOUS_ROW_CHANGE_LEAD || name == SELECT_NEXT_ROW_CHANGE_LEAD || name == SELECT_FIRST_ROW_CHANGE_LEAD || name == SELECT_LAST_ROW_CHANGE_LEAD || name == SCROLL_UP_CHANGE_LEAD || name == SCROLL_DOWN_CHANGE_LEAD) { // discontinuous selection actions are only enabled for // DefaultListSelectionModel return c != null && ((JList)c).getSelectionModel() instanceof DefaultListSelectionModel; } return true; } private void clearSelection(JList list) { list.clearSelection(); } private void selectAll(JList list) { int size = list.getModel().getSize(); if (size > 0) { ListSelectionModel lsm = list.getSelectionModel(); if (lsm.getSelectionMode() == ListSelectionModel.SINGLE_SELECTION) { int leadIndex = list.getLeadSelectionIndex(); if (leadIndex != -1) { list.setSelectionInterval(leadIndex, leadIndex); } else if (list.getMinSelectionIndex() == -1) { list.setSelectionInterval(0, 0); list.ensureIndexIsVisible(0); } } else { list.setValueIsAdjusting(true); int anchor = lsm.getAnchorSelectionIndex(); int lead = lsm.getLeadSelectionIndex(); list.setSelectionInterval(0, size - 1); // this is called simply to restore the anchor and lead list.addSelectionInterval(anchor, lead); list.setValueIsAdjusting(false); } } } private void scroll(JList list, int type, boolean up) { int index = getNextPageIndex(list, up); if (index != -1) { changeSelection(list, type, index, false); // down Rectangle visRect = list.getVisibleRect(); Rectangle cellBounds = list.getCellBounds(index, index); if (!up) { cellBounds.y = Math.max(0, cellBounds.y + cellBounds.height -visRect.height); cellBounds.height = visRect.height; } else { cellBounds.height = visRect.height; } list.scrollRectToVisible(cellBounds); } } private int getNextPageIndex(JList list, boolean up) { if (up) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -