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

📄 jxtreetable.java

📁 java实现浏览器等本地桌面的功能
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
     * {@inheritDoc}     */    public int getEditingRow() {        return isHierarchical(editingColumn) ? -1 : editingRow;    }    /**     * Returns the actual row that is editing as <code>getEditingRow</code>     * will always return -1.     */    private int realEditingRow() {        return editingRow;    }    /**     * Sets the data model for this JXTreeTable to the specified     * {@link org.jdesktop.swingx.treetable.TreeTableModel}. The same data model     * may be shared by any number of JXTreeTable instances.     *     * @param treeModel data model for this JXTreeTable     */    public void setTreeTableModel(TreeTableModel treeModel) {        renderer.setModel(treeModel);        // #241: make sure old listeners are removed        // JW: this should be done more cleanly, actually there is no need        // to create a new adapter when setting a new treeModel.        // what's needed is to fire a structureChanged                ((TreeTableModelAdapter)getModel()).setTreeTableModel(treeModel);        // Enforce referential integrity; bail on fail        if (treeModel != renderer.getModel()) { // do not use assert here!            throw new IllegalArgumentException("Mismatched TreeTableModel");        }        // Install the default editor.        setDefaultEditor(AbstractTreeTableModel.hierarchicalColumnClass,            new TreeTableCellEditor(renderer));        // JTable supports row margins and intercell spacing, but JTree doesn't.        // We must reconcile the differences in the semantics of rowHeight as        // understood by JTable and JTree by overriding both setRowHeight() and        // setRowMargin();        adminSetRowHeight(getRowHeight());        setRowMargin(getRowMargin()); // call overridden setRowMargin()    }    /**     * Returns the underlying TreeTableModel for this JXTreeTable.     *     * @return the underlying TreeTableModel for this JXTreeTable     */    public TreeTableModel getTreeTableModel() {        return ((TreeTableModelAdapter) getModel()).getTreeTableModel();    }    /**     * <p>Overrides superclass version to make sure that the specified     * {@link javax.swing.table.TableModel} is compatible with JXTreeTable before     * invoking the inherited version.</p>     *     * <p>Because JXTreeTable internally adapts an     * {@link org.jdesktop.swingx.treetable.TreeTableModel} to make it a compatible     * TableModel, <b>this method should never be called directly</b>. Use     * {@link #setTreeTableModel(org.jdesktop.swingx.treetable.TreeTableModel) setTreeTableModel} instead.</p>     *     * <p>While it is possible to obtain a reference to this adapted     * version of the TableModel by calling {@link javax.swing.JTable#getModel()},     * any attempt to call setModel() with that adapter will fail because     * the adapter might have been bound to a different JXTreeTable instance. If     * you want to extract the underlying TreeTableModel, which, by the way,     * <em>can</em> be shared, use {@link #getTreeTableModel() getTreeTableModel}     * instead</p>.     *     * @param tableModel must be a TreeTableModelAdapter     * @throws IllegalArgumentException if the specified tableModel is not an     * instance of TreeTableModelAdapter     */    public final void setModel(TableModel tableModel) { // note final keyword        if (tableModel instanceof TreeTableModelAdapter) {            if (((TreeTableModelAdapter) tableModel).getTreeTable() == null) {                // Passing the above test ensures that this method is being                // invoked either from JXTreeTable/JTable constructor or from                // setTreeTableModel(TreeTableModel)                super.setModel(tableModel); // invoke superclass version                ((TreeTableModelAdapter) tableModel).bind(this); // permanently bound                // Once a TreeTableModelAdapter is bound to any JXTreeTable instance,                // invoking JXTreeTable.setModel() with that adapter will throw an                // IllegalArgumentException, because we really want to make sure                // that a TreeTableModelAdapter is NOT shared by another JXTreeTable.            }            else {                throw new IllegalArgumentException("model already bound");            }        }        else {            throw new IllegalArgumentException("unsupported model type");        }    }    /**     * Throws UnsupportedOperationException because variable height rows are     * not supported.     *     * @param row ignored     * @param rowHeight ignored     * @throws UnsupportedOperationException because variable height rows are     * not supported     */    public final void setRowHeight(int row, int rowHeight) {        throw new UnsupportedOperationException("variable height rows not supported");    }    /**     * Sets the row height for this JXTreeTable. Reconciles semantic differences     * between JTable and JTree regarding row height.     *     * @param rowHeight height of a row     */    public void setRowHeight(int rowHeight) {        super.setRowHeight(rowHeight);        adjustTreeRowHeight(); // JTree doesn't have setRowMargin. So adjust.    }    /**     * <p>Sets the margin between columns.</p>     *     * <p>If you set the column margin to zero, make sure that you also set     * <code>showVerticalLines</code> to <code>false</code>.</p>     *     * @param columnMargin margin between columns; must be greater than or equal to zero.     * @see #setShowVerticalLines(boolean) setShowVerticalLines     */    public void setColumnMargin(int columnMargin) {        super.setColumnMargin(columnMargin);    }    /**     * <p>Overridden to ensure that private renderer state is kept in sync with the     * state of the component. Calls the inherited version after performing the     * necessary synchronization. If you override this method, make sure you call     * this version from your version of this method.</p>     *     * <p>If you set row margin to zero, make sure that you also set     * <code>showHorizontalLines</code> to <code>false</code>.</p>     *     * @param rowMargin margin or intercell spacing between rows     * @see #setShowHorizontalLines(boolean) setShowHorizontalLines     */    public void setRowMargin(int rowMargin) {        // No need to override setIntercellSpacing, because the change in        // rowMargin will be funneled through this method anyway.        super.setRowMargin(rowMargin);        adjustTreeRowHeight(); // JTree doesn't have setRowMargin. So adjust.    }    /**     * Reconciles semantic differences between JTable and JTree regarding     * row height.     */    private void adjustTreeRowHeight() {        final int treeRowHeight = rowHeight + (rowMargin << 1);        if (renderer != null && renderer.getRowHeight() != treeRowHeight) {            renderer.setRowHeight(treeRowHeight);        }    }    /**     * <p>Overridden to ensure that private renderer state is kept in sync with the     * state of the component. Calls the inherited version after performing the     * necessary synchronization. If you override this method, make sure you call     * this version from your version of this method.</p>     *     * <p>This version maps the selection mode used by the renderer to match the     * selection mode specified for the table. Specifically, the modes are mapped     * as follows:     * <pre>     *  ListSelectionModel.SINGLE_INTERVAL_SELECTION: TreeSelectionModel.CONTIGUOUS_TREE_SELECTION;     *  ListSelectionModel.MULTIPLE_INTERVAL_SELECTION: TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION;     *  any other (default): TreeSelectionModel.SINGLE_TREE_SELECTION;     * </pre>     *     * {@inheritDoc}     *     * @param mode any of the table selection modes     */    public void setSelectionMode(int mode) {        if (renderer != null) {            switch (mode) {                case ListSelectionModel.SINGLE_INTERVAL_SELECTION: {                    renderer.getSelectionModel().setSelectionMode(                        TreeSelectionModel.CONTIGUOUS_TREE_SELECTION);                    break;                }                case ListSelectionModel.MULTIPLE_INTERVAL_SELECTION: {                    renderer.getSelectionModel().setSelectionMode(                        TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION);                    break;                }                default: {                    renderer.getSelectionModel().setSelectionMode(                        TreeSelectionModel.SINGLE_TREE_SELECTION);                    break;                }            }        }        super.setSelectionMode(mode);    }    /**     * Overrides superclass version to provide support for cell decorators.     *     * @param renderer the <code>TableCellRenderer</code> to prepare     * @param row the row of the cell to render, where 0 is the first row     * @param column the column of the cell to render, where 0 is the first column     * @return the <code>Component</code> used as a stamp to render the specified cell     */    public Component prepareRenderer(TableCellRenderer renderer, int row,        int column) {                Component component = super.prepareRenderer(renderer, row, column);        // MUST ALWAYS ACCESS dataAdapter through accessor method!!!        ComponentAdapter    adapter = getComponentAdapter();        adapter.row = row;        adapter.column = column;                return applyRenderer(component, adapter);     }    /**     * Performs necessary housekeeping before the renderer is actually applied.     *     * @param component     * @param adapter component data adapter     * @throws NullPointerException if the specified component or adapter is null     */    protected Component applyRenderer(Component component,        ComponentAdapter adapter) {        if (component == null) {            throw new IllegalArgumentException("null component");        }        if (adapter == null) {            throw new IllegalArgumentException("null component data adapter");        }        if (isHierarchical(adapter.column)) {            // After all decorators have been applied, make sure that relevant            // attributes of the table cell renderer are applied to the            // tree cell renderer before the hierarchical column is rendered!            TreeCellRenderer tcr = renderer.getCellRenderer();            if (tcr instanceof JXTree.DelegatingRenderer) {                tcr = ((JXTree.DelegatingRenderer) tcr).getDelegateRenderer();                            }            if (tcr instanceof DefaultTreeCellRenderer) {                DefaultTreeCellRenderer dtcr = ((DefaultTreeCellRenderer) tcr);                if (adapter.isSelected()) {                    dtcr.setTextSelectionColor(component.getForeground());                    dtcr.setBackgroundSelectionColor(component.getBackground());               } else {                    dtcr.setTextNonSelectionColor(component.getForeground());                    dtcr.setBackgroundNonSelectionColor(component.getBackground());                }            }         }        return component;    }    /**     * Sets the specified TreeCellRenderer as the Tree cell renderer.     *     * @param cellRenderer to use for rendering tree cells.     */    public void setTreeCellRenderer(TreeCellRenderer cellRenderer) {        if (renderer != null) {            renderer.setCellRenderer(cellRenderer);        }    }    public TreeCellRenderer getTreeCellRenderer() {        return renderer.getCellRenderer();    }        public String getToolTipText(MouseEvent event) {        int column = columnAtPoint(event.getPoint());        if (isHierarchical(column)) {            return renderer.getToolTipText(event);        }        return super.getToolTipText(event);    }        /**     * Sets the specified icon as the icon to use for rendering collapsed nodes.     *     * @param icon to use for rendering collapsed nodes     */    public void setCollapsedIcon(Icon icon) {        renderer.setCollapsedIcon(icon);    }    /**     * Sets the specified icon as the icon to use for rendering expanded nodes.     *     * @param icon to use for rendering expanded nodes     */    public void setExpandedIcon(Icon icon) {        renderer.setExpandedIcon(icon);    }    /**     * Sets the specified icon as the icon to use for rendering open container nodes.     *     * @param icon to use for rendering open nodes     */    public void setOpenIcon(Icon icon) {        renderer.setOpenIcon(icon);    }    /**     * Sets the specified icon as the icon to use for rendering closed container nodes.     *     * @param icon to use for rendering closed nodes     */    public void setClosedIcon(Icon icon) {        renderer.setClosedIcon(icon);    }    /**     * Sets the specified icon as the icon to use for rendering leaf nodes.     *     * @param icon to use for rendering leaf nodes     */    public void setLeafIcon(Icon icon) {        renderer.setLeafIcon(icon);    }

⌨️ 快捷键说明

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