Results 1 to 1 of 1

Thread: *FIXED (Sort of)* JTree Cell Editing ::stopCellEditing does not work

Threaded View

  1. #1

    Thread Starter
    Addicted Member
    Join Date
    May 2001
    Location
    UK
    Posts
    222

    Unhappy *FIXED (Sort of)* JTree Cell Editing ::stopCellEditing does not work

    Well sort of fixed, i just placed my model in the editor, called the methods to get the new value, set the value in themodel, then called cancel cell editing, it appears to give the same results but is a bit of a hack to be honest.. if anyone has any other suggestiosn then let me know

    Andy...




    Hello

    I wanted to do some tree cell/node editing, so i wrote my own TreeCellEditor, everything works apart from the stop cell editing, from what i understood, when this was called it would alert my model and call the method, valueForPathHasChanged(Path, newvalue) and this is where i would do all my actuall changes, for some reason this isn't triggering, and my stop cell editing method, when called dosen't seem to remove the editing renderer from the tree, untill i click on another node....

    what is it i'm doing wrong? i cycle through my listeners and call stopcellediting, but it dosen't seem to work...

    Code:
    /**
     * @author ad
     */
    public class ToolBoxEditor extends JTextField implements TreeCellEditor{
    
    	
    	private EventListenerList eventListeners = new EventListenerList();
    	
    	public ToolBoxEditor(){
    		this.addKeyListener(new EnterKeyListener());
    	}
    	
    	/**
    	 * @see javax.swing.tree.TreeCellEditor#getTreeCellEditorComponent(javax.swing.JTree, java.lang.Object, boolean, boolean, boolean, int)
    	 */
    	public Component getTreeCellEditorComponent(JTree tree, Object value, boolean isSelected, boolean expanded, boolean leaf, int row) {
    		if(value instanceof IHexFactoryContainerTreeNode){
    			IHexFactoryContainerTreeNode container = (IHexFactoryContainerTreeNode)value;
    			this.setText(container.getName());
    			this.setSelectionStart(0);
    			this.setSelectionEnd(container.getName().length());
    		}else if(value instanceof IHexFactoryTreeNode){
    			IHexFactoryTreeNode factory = (IHexFactoryTreeNode)value;
    			PropertySet set = factory.getFactory().getPropertySet();
    			String name = IHexObjects.getString(factory.getFactory(), IHexObject.NAME);
    			this.setText(name);
    			this.setSelectionStart(0);
    			this.setSelectionEnd(name.length());
    		}
    		return this;
    	}
    
    	/**
    	 * @see javax.swing.CellEditor#cancelCellEditing()
    	 */
    	public void cancelCellEditing() {
    		ChangeEvent e = new ChangeEvent(this);
    		this.fireEditingCanceled(e);
    	}
    
    	/**
    	 * @see javax.swing.CellEditor#stopCellEditing()
    	 */
    	public boolean stopCellEditing() {
    		System.out.println("we are rtying to stop the editing now please....");
    		ChangeEvent e = new ChangeEvent(this);
    		this.fireEditingStopped(e);
    		return true;
    	}
    
    	/**
    	 * @see javax.swing.CellEditor#getCellEditorValue()
    	 */
    	public Object getCellEditorValue() {
    		return this.getText();
    	}
    
    	/**
    	 * @see javax.swing.CellEditor#isCellEditable(java.util.EventObject)
    	 */
    	public boolean isCellEditable(EventObject anEvent) {
    		if(anEvent instanceof MouseEvent){
    			MouseEvent mouseE = (MouseEvent)anEvent;
    			if(mouseE.getClickCount() == 3){
    				return true;
    			}else{return false;}
    		}else if(anEvent instanceof KeyEvent){
    			/**
    			 * TODO add Key Modifiers for editing.
    			 */
    		}
    		return true;
    	}
    
    	/**
    	 * @see javax.swing.CellEditor#shouldSelectCell(java.util.EventObject)
    	 */
    	public boolean shouldSelectCell(EventObject anEvent) {
    		return true;
    	}
    
    	/**
    	 * @see javax.swing.CellEditor#addCellEditorListener(javax.swing.event.CellEditorListener)
    	 */
    	public void addCellEditorListener(CellEditorListener l) {
    		this.eventListeners.add(CellEditorListener.class, l);
    	}
    
    	/**
    	 * @see javax.swing.CellEditor#removeCellEditorListener(javax.swing.event.CellEditorListener)
    	 */
    	public void removeCellEditorListener(CellEditorListener l) {
    		this.eventListeners.remove(CellEditorListener.class, l);
    	}
    
    	/**
    	 * Fire Editing Canceled Event
    	 * @param e
    	 */
    	private void fireEditingCanceled(ChangeEvent e){
    		Object[] obj = this.listenerList.getListeners(CellEditorListener.class);
    		for(int i = 0; i < obj.length; i++){
    			((CellEditorListener)obj[i]).editingCanceled(e);
    		}
    	}
    	
    	/**
    	 * Fire an Editing Stopped Event.
    	 * @param event
    	 */
    	private void fireEditingStopped(ChangeEvent event){
    		Object[] obj = this.listenerList.getListeners(CellEditorListener.class);
    		for(int i = 0; i < obj.length; i++){
    			((CellEditorListener)obj[i]).editingStopped(event);
    		}		
    	}
    	
    	/**
    	 * To Detect when the Enter Key is pressed
    	 * @author ad
    	 */
    	private class EnterKeyListener extends KeyAdapter{
    		/**
    		 * @see java.awt.event.KeyAdapter#keyPressed(java.awt.event.KeyEvent)
    		 */
    		public void keyReleased(KeyEvent e) {
    			if(e.getKeyCode() == KeyEvent.VK_ENTER){
    				stopCellEditing();
    			}
    			else 
    				if(e.getKeyCode() == KeyEvent.VK_ESCAPE){
    				cancelCellEditing();
    			}
    		}
    	}
    	
    }

    Andy
    Last edited by Andy_Hollywood; Jun 11th, 2004 at 04:35 AM.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width