📄 defaulttreecelleditor.java
字号:
renderer.setIcon(renderer.getClosedIcon()); editingIcon = renderer.getIcon(); editingComponent = getTreeCellEditorComponent(tree, val, true, expanded, isLeaf, lastRow); } } /** * writeObject * * @param value0 * TODO * @exception IOException * TODO */ private void writeObject(ObjectOutputStream value0) throws IOException { // TODO } /** * readObject * @param value0 TODO * @exception IOException TODO * @exception ClassNotFoundException TODO */ private void readObject(ObjectInputStream value0) throws IOException, ClassNotFoundException { // TODO } /** * Sets the color to use for the border. * @param newColor - the new border color */ public void setBorderSelectionColor(Color newColor) { this.borderSelectionColor = newColor; } /** * Returns the color the border is drawn. * @return Color */ public Color getBorderSelectionColor() { return borderSelectionColor; } /** * Sets the font to edit with. null indicates the renderers * font should be used. This will NOT override any font you have * set in the editor the receiver was instantied with. If null for * an editor was passed in, a default editor will be created that * will pick up this font. * * @param font - the editing Font */ public void setFont(Font font) { if (font != null) this.font = font; else this.font = renderer.getFont(); } /** * Gets the font used for editing. * * @return the editing font */ public Font getFont() { return font; } /** * Configures the editor. Passed onto the realEditor. * Sets an initial value for the editor. This will cause * the editor to stopEditing and lose any partially edited value * if the editor is editing when this method is called. * Returns the component that should be added to the client's Component * hierarchy. Once installed in the client's hierarchy this component will * then be able to draw and receive user input. * * @param tree - the JTree that is asking the editor to edit; this parameter can be null * @param value - the value of the cell to be edited * @param isSelected - true is the cell is to be rendered with selection highlighting * @param expanded - true if the node is expanded * @param leaf - true if the node is a leaf node * @param row - the row index of the node being edited * * @return the component for editing */ public Component getTreeCellEditorComponent(JTree tree, Object value, boolean isSelected, boolean expanded, boolean leaf, int row) { if (realEditor == null) createTreeCellEditor(); return realEditor.getTreeCellEditorComponent(tree, value, isSelected, expanded, leaf, row); } /** * Returns the value currently being edited. * * @return the value currently being edited */ public Object getCellEditorValue() { return editingComponent; } /** * If the realEditor returns true to this message, prepareForEditing * is messaged and true is returned. * * @param event - the event the editor should use to consider whether to begin editing or not * @return true if editing can be started */ public boolean isCellEditable(EventObject event) { if (editingComponent == null) configureEditingComponent(tree, renderer, realEditor); if (editingComponent != null && realEditor.isCellEditable(event)) { prepareForEditing(); return true; } // Cell may not be currently editable, but may need to start timer. if (shouldStartEditingTimer(event)) startEditingTimer(); else if (timer.isRunning()) timer.stop(); return false; } /** * Messages the realEditor for the return value. * * @param event - * the event the editor should use to start editing * @return true if the editor would like the editing cell to be selected; * otherwise returns false */ public boolean shouldSelectCell(EventObject event) { return true; } /** * If the realEditor will allow editing to stop, the realEditor * is removed and true is returned, otherwise false is returned. * @return true if editing was stopped; false otherwise */ public boolean stopCellEditing() { if (editingComponent != null && realEditor.stopCellEditing()) { timer.stop(); return true; } return false; } /** * Messages cancelCellEditing to the realEditor and removes it * from this instance. */ public void cancelCellEditing() { if (editingComponent != null) { timer.stop(); realEditor.cancelCellEditing(); } } /** * Adds a <code>CellEditorListener</code> object to this editor. * * @param listener the listener to add */ public void addCellEditorListener(CellEditorListener listener) { realEditor.addCellEditorListener(listener); } /** * Removes a <code>CellEditorListener</code> object. * * @param listener the listener to remove */ public void removeCellEditorListener(CellEditorListener listener) { realEditor.removeCellEditorListener(listener); } /** * Returns all added <code>CellEditorListener</code> objects to this editor. * * @return an array of listeners * * @since 1.4 */ public CellEditorListener[] getCellEditorListeners() { return (CellEditorListener[]) listenerList.getListeners(CellEditorListener.class); } /** * Resets lastPath. * * @param e - the event that characterizes the change. */ public void valueChanged(TreeSelectionEvent e) { tPath = lastPath; lastPath = e.getNewLeadSelectionPath(); lastRow = tree.getRowForPath(lastPath); configureEditingComponent(tree, renderer, realEditor); } /** * Messaged when the timer fires, this will start the editing session. * * @param e the event that characterizes the action. */ public void actionPerformed(ActionEvent e) { if (lastPath != null && tPath != null && tPath.equals(lastPath)) { tree.startEditingAtPath(lastPath); timer.stop(); } } /** * Sets the tree currently editing for. This is needed to add a selection * listener. * * @param newTree - * the new tree to be edited */ protected void setTree(JTree newTree) { tree = newTree; } /** * Returns true if event is a MouseEvent and the click count is 1. * * @param event - the event being studied * @return true if editing should start */ protected boolean shouldStartEditingTimer(EventObject event) { if ((event instanceof MouseEvent) && ((MouseEvent) event).getClickCount() == 1) return true; return false; } /** * Starts the editing timer. */ protected void startEditingTimer() { if (timer == null) timer = new javax.swing.Timer(1200, this); if (!timer.isRunning()) timer.start(); } /** * Returns true if event is null, or it is a MouseEvent with * a click count > 2 and inHitRegion returns true. * * @param event - the event being studied * @return true if event is null, or it is a MouseEvent with * a click count > 2 and inHitRegion returns true */ protected boolean canEditImmediately(EventObject event) { if (event == null || !(event instanceof MouseEvent) || (((MouseEvent) event). getClickCount() > 2 && inHitRegion(((MouseEvent) event).getX(), ((MouseEvent) event).getY()))) return true; return false; } /** * Returns true if the passed in location is a valid mouse location * to start editing from. This is implemented to return false if x is * less than or equal to the width of the icon and icon * gap displayed by the renderer. In other words this returns true if * the user clicks over the text part displayed by the renderer, and * false otherwise. * * @param x - the x-coordinate of the point * @param y - the y-coordinate of the point * * @return true if the passed in location is a valid mouse location */ protected boolean inHitRegion(int x, int y) { Rectangle bounds = tree.getPathBounds(lastPath); return bounds.contains(x, y); } /** * determineOffset * @param tree - * @param value - * @param isSelected - * @param expanded - * @param leaf - * @param row - */ protected void determineOffset(JTree tree, Object value, boolean isSelected, boolean expanded, boolean leaf, int row) { renderer.getTreeCellRendererComponent(tree, value, isSelected, expanded, leaf, row, true); Icon c = renderer.getIcon(); if (c != null) offset = renderer.getIconTextGap() + c.getIconWidth(); else offset = 0; } /** * Invoked just before editing is to start. Will add the * editingComponent to the editingContainer. */ protected void prepareForEditing() { editingContainer.add(editingComponent); } /** * Creates the container to manage placement of editingComponent. * * @return the container to manage the placement of the editingComponent. */ protected Container createContainer() { return new DefaultTreeCellEditor.EditorContainer(); } /** * This is invoked if a TreeCellEditor is not supplied in the constructor. * It returns a TextField editor. * * @return a new TextField editor */ protected TreeCellEditor createTreeCellEditor() { realEditor = new DefaultCellEditor(new DefaultTreeCellEditor.DefaultTextField( UIManager.getBorder("Tree.selectionBorder"))); return realEditor; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -