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

📄 jxlist.java

📁 java实现浏览器等本地桌面的功能
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
     * disable again.     *      * see Issue #2-swinglabs.     *      * @param enabled     */    public void setFilterEnabled(boolean enabled) {        boolean old = isFilterEnabled();        if (old == enabled)            return;        filterEnabled = enabled;        if (!old) {            wrappingModel = new WrappingListModel(getModel());            super.setModel(wrappingModel);        } else {            ListModel model = wrappingModel.getModel();            wrappingModel = null;            super.setModel(model);        }    }    public boolean isFilterEnabled() {        return filterEnabled;    }    /**     * set's the underlying data model. Note that if isFilterEnabled you must     * call getWrappedModel to access the model given here. In this case     * getModel returns a wrapper around the data!     *      *      *      */    public void setModel(ListModel model) {        if (isFilterEnabled()) {            wrappingModel.setModel(model);        } else {            super.setModel(model);        }    }    private Selection getSelection() {        if (selection == null) {            selection = new Selection(filters, getSelectionModel());        }        return selection;    }    public FilterPipeline getFilters() {        if ((filters == null) && isFilterEnabled()) {            setFilters(null);        }        return filters;    }    /** Sets the FilterPipeline for filtering table rows.      *  PRE: isFilterEnabled()     *      * @param pipeline the filterPipeline to use.     * @throws IllegalStateException if !isFilterEnabled()     */    public void setFilters(FilterPipeline pipeline) {        if (!isFilterEnabled()) throw            new IllegalStateException("filters not enabled - not allowed to set filters");        FilterPipeline old = filters;        Sorter sorter = null;        if (old != null) {            old.removePipelineListener(pipelineListener);            sorter = old.getSorter();        }        if (pipeline == null) {            pipeline = new FilterPipeline();        }        filters = pipeline;        filters.setSorter(sorter);        use(filters);        getSelection().setFilters(filters);    }    /**     * setModel() and setFilters() may be called in either order.     *      * @param pipeline     */    private void use(FilterPipeline pipeline) {        if (pipeline != null) {            // check JW: adding listener multiple times (after setModel)?            if (initialUse(pipeline)) {                pipeline.addPipelineListener(getFilterPipelineListener());                pipeline.assign(getComponentAdapter());            } else {                pipeline.flush();            }        }    }    /**     * @return true is not yet used in this JXTable, false otherwise     */    private boolean initialUse(FilterPipeline pipeline) {        if (pipelineListener == null)            return true;        PipelineListener[] l = pipeline.getPipelineListeners();        for (int i = 0; i < l.length; i++) {            if (pipelineListener.equals(l[i]))                return false;        }        return true;    }    /** returns the listener for changes in filters. */    protected PipelineListener getFilterPipelineListener() {        if (pipelineListener == null) {            pipelineListener = createPipelineListener();        }        return pipelineListener;    }    /** creates the listener for changes in filters. */    protected PipelineListener createPipelineListener() {        PipelineListener l = new PipelineListener() {            public void contentsChanged(PipelineEvent e) {                updateOnFilterContentChanged();            }        };        return l;    }    /**     * method called on change notification from filterpipeline.     */    protected void updateOnFilterContentChanged() {        // make the wrapper listen to the pipeline?        if (wrappingModel != null) {            wrappingModel.updateOnFilterContentChanged();        }        revalidate();        repaint();    }    private class WrappingListModel extends AbstractListModel {        private ListModel delegate;        private ListDataListener listDataListener;        public WrappingListModel(ListModel model) {            setModel(model);        }        public void updateOnFilterContentChanged() {            fireContentsChanged(this, -1, -1);        }        public void setModel(ListModel model) {            ListModel old = this.getModel();            if (old != null) {                old.removeListDataListener(listDataListener);            }            this.delegate = model;            delegate.addListDataListener(getListDataListener());            fireContentsChanged(this, -1, -1);        }        private ListDataListener getListDataListener() {            if (listDataListener == null) {                listDataListener = createListDataListener();            }            return listDataListener;        }        private ListDataListener createListDataListener() {            ListDataListener l = new ListDataListener() {                public void intervalAdded(ListDataEvent e) {                    contentsChanged(e);                }                public void intervalRemoved(ListDataEvent e) {                    contentsChanged(e);                }                public void contentsChanged(ListDataEvent e) {                    getSelection().lock();                    fireContentsChanged(this, -1, -1);                    updateSelection(e);                    getFilters().flush();                }            };            return l;        }        protected void updateSelection(ListDataEvent e) {            if (e.getType() == ListDataEvent.INTERVAL_REMOVED) {                getSelection()                        .removeIndexInterval(e.getIndex0(), e.getIndex1());            } else if (e.getType() == ListDataEvent.INTERVAL_ADDED) {                int minIndex = Math.min(e.getIndex0(), e.getIndex1());                int maxIndex = Math.max(e.getIndex0(), e.getIndex1());                int length = maxIndex - minIndex + 1;                getSelection().insertIndexInterval(minIndex, length, true);            } else {                getSelection().clearModelSelection();            }        }        public ListModel getModel() {            return delegate;        }        public int getSize() {            return getFilters().getOutputSize();        }        public Object getElementAt(int index) {            return getFilters().getValueAt(index, 0);        }    }    // ---------------------------- uniform data model    protected ComponentAdapter getComponentAdapter() {        if (dataAdapter == null) {            dataAdapter = new ListAdapter(this);        }        return dataAdapter;    }    protected static class ListAdapter extends ComponentAdapter {        private final JXList list;        /**         * Constructs a <code>ListDataAdapter</code> for the specified target         * component.         *          * @param component         *            the target component         */        public ListAdapter(JXList component) {            super(component);            list = component;        }        /**         * Typesafe accessor for the target component.         *          * @return the target component as a {@link org.jdesktop.swingx.JXList}         */        public JXList getList() {            return list;        }        /**         * {@inheritDoc}         */        public boolean hasFocus() {            /** @todo Think through printing implications */            return list.isFocusOwner() && (row == list.getLeadSelectionIndex());        }        public int getRowCount() {            return list.getWrappedModel().getSize();        }        /**         * {@inheritDoc}         */        public Object getValueAt(int row, int column) {            return list.getWrappedModel().getElementAt(row);        }        public Object getFilteredValueAt(int row, int column) {            return list.getElementAt(row);        }        public void setValueAt(Object aValue, int row, int column) {            throw new UnsupportedOperationException(                    "Method getFilteredValueAt() not yet implemented.");        }        public boolean isCellEditable(int row, int column) {            return false;        }        /**         * {@inheritDoc}         */        public boolean isSelected() {            /** @todo Think through printing implications */            return list.isSelectedIndex(row);        }        public String getColumnName(int columnIndex) {            return "Column_" + columnIndex;        }        public String getColumnIdentifier(int columnIndex) {            return null;        }    }    // ------------------------------ renderers    public HighlighterPipeline getHighlighters() {        return highlighters;    }    /** Assigns a HighlighterPipeline to the table. */    public void setHighlighters(HighlighterPipeline pipeline) {        HighlighterPipeline old = getHighlighters();        if (old != null) {            old.removeChangeListener(getHighlighterChangeListener());        }        highlighters = pipeline;        if (highlighters != null) {            highlighters.addChangeListener(getHighlighterChangeListener());        }        firePropertyChange("highlighters", old, getHighlighters());    }    private ChangeListener getHighlighterChangeListener() {        if (highlighterChangeListener == null) {            highlighterChangeListener = new ChangeListener() {                public void stateChanged(ChangeEvent e) {                    repaint();                }            };        }        return highlighterChangeListener;    }    private DelegatingRenderer getDelegatingRenderer() {        if (delegatingRenderer == null) {            // only called once... to get hold of the default?            delegatingRenderer = new DelegatingRenderer(super.getCellRenderer());        }        return delegatingRenderer;    }    public ListCellRenderer getCellRenderer() {        return getDelegatingRenderer();    }    public void setCellRenderer(ListCellRenderer renderer) {        // JW: Pending - probably fires propertyChangeEvent with wrong newValue?        // how about fixedCellWidths?        // need to test!!        getDelegatingRenderer().setDelegateRenderer(renderer);        super.setCellRenderer(delegatingRenderer);    }    private class DelegatingRenderer implements ListCellRenderer {        private LinkRenderer linkRenderer;        private ListCellRenderer delegateRenderer;        public DelegatingRenderer(ListCellRenderer delegate) {            setDelegateRenderer(delegate);        }        public void setDelegateRenderer(ListCellRenderer delegate) {            if (delegate == null) {                delegate = new DefaultListCellRenderer();            }            delegateRenderer = delegate;        }        public Component getListCellRendererComponent(JList list, Object value,                int index, boolean isSelected, boolean cellHasFocus) {            Component comp = null;            if (value instanceof LinkModel) {                comp = getLinkRenderer().getListCellRendererComponent(list,                        value, index, isSelected, cellHasFocus);            } else {                comp = delegateRenderer.getListCellRendererComponent(list,                        value, index, isSelected, cellHasFocus);            }            if (highlighters != null) {                ComponentAdapter adapter = getComponentAdapter();                adapter.column = 0;                adapter.row = index;                comp = highlighters.apply(comp, adapter);            }            return comp;        }        private LinkRenderer getLinkRenderer() {            if (linkRenderer == null) {                linkRenderer = new LinkRenderer();            }            return linkRenderer;        }        public void setLinkVisitor(ActionListener linkVisitor) {            getLinkRenderer().setVisitingDelegate(linkVisitor);        }        public void updateUI() {            updateRendererUI(linkRenderer);            updateRendererUI(delegateRenderer);        }        private void updateRendererUI(ListCellRenderer renderer) {            if (renderer instanceof JComponent) {                ((JComponent) renderer).updateUI();            } else if (renderer != null) {                Component comp = renderer.getListCellRendererComponent(                        JXList.this, null, -1, false, false);                if (comp instanceof JComponent) {                    ((JComponent) comp).updateUI();                }            }        }    }    // --------------------------- updateUI    public void updateUI() {        super.updateUI();        updateRendererUI();    }    private void updateRendererUI() {        if (delegatingRenderer != null) {            delegatingRenderer.updateUI();        } else {            ListCellRenderer renderer = getCellRenderer();            if (renderer instanceof JComponent) {                ((JComponent) renderer).updateUI();            }        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -