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

📄 mxcelleditor.java

📁 经典的java图像处理程序源码
💻 JAVA
字号:
/** * $Id: mxCellEditor.java,v 1.10 2009/05/07 07:24:13 gaudenz Exp $ * Copyright (c) 2008, Gaudenz Alder */package com.mxgraph.swing.view;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Component;import java.awt.Rectangle;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.util.EventObject;import javax.swing.BorderFactory;import javax.swing.JEditorPane;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.text.JTextComponent;import com.mxgraph.model.mxGeometry;import com.mxgraph.model.mxIGraphModel;import com.mxgraph.swing.mxGraphComponent;import com.mxgraph.util.mxConstants;import com.mxgraph.util.mxUtils;import com.mxgraph.view.mxCellState;/** * To control this editor, use mxGraph.invokesStopCellEditing, mxGraph. * enterStopsCellEditing and mxGraph.escapeEnabled. */public class mxCellEditor implements mxICellEditor{	/**	 * 	 */	public static int DEFAULT_MIN_WIDTH = 100;	/**	 * 	 */	public static int DEFAULT_MIN_HEIGHT = 60;	/**	 * 	 */	public static double DEFAULT_MINIMUM_EDITOR_SCALE = 1;	/**	 * 	 */	protected mxGraphComponent graphComponent;	/**	 * Defines the minimum scale to be used for the editor. Set this to	 * 0 if the font size in the editor 	 */	protected double minimumEditorScale = DEFAULT_MINIMUM_EDITOR_SCALE;	/**	 * 	 */	protected int minimumWidth = DEFAULT_MIN_WIDTH;	/**	 * 	 */	protected int minimumHeight = DEFAULT_MIN_HEIGHT;	/**	 * 	 */	protected transient Object editingCell;	/**	 * 	 */	protected transient EventObject trigger;	/**	 * 	 */	protected transient JScrollPane scrollPane;	/**	 * Holds the editor for plain text editing.	 */	protected transient JTextArea textArea;	/**	 * Holds the editor for HTML editing.	 */	protected transient JEditorPane editorPane;	/**	 * 	 */	protected transient KeyAdapter keyListener = new KeyAdapter()	{		/**		 * 		 */		protected transient boolean ignoreEnter = false;		/**		 * 		 */		public void keyPressed(KeyEvent e)		{			if (graphComponent.isEnterStopsCellEditing()					&& e.getKeyCode() == KeyEvent.VK_ENTER)			{				if (e.isShiftDown() || e.isControlDown() || e.isAltDown())				{					if (!ignoreEnter)					{						ignoreEnter = true;						// Redirects the event with no modifier keys						try						{							KeyEvent event = new KeyEvent((Component) e									.getSource(), e.getID(), e.getWhen(), 0, e									.getKeyCode(), e.getKeyChar());							((Component) e.getSource()).dispatchEvent(event);						}						finally						{							ignoreEnter = false;						}					}				}				else if (!ignoreEnter)				{					stopEditing(false);				}			}		}	};	/**	 * 	 */	public mxCellEditor(mxGraphComponent graphComponent)	{		this.graphComponent = graphComponent;		// Creates the plain text editor		textArea = new JTextArea();		textArea.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));		textArea.setOpaque(false);		textArea.addKeyListener(keyListener);		// Creates the HTML editor		editorPane = new JEditorPane();		editorPane.setOpaque(false);		editorPane.setContentType("text/html");		editorPane.addKeyListener(keyListener);		// Creates the scollpane that contains the editor		// FIXME: Cursor not visible when scrolling		scrollPane = new JScrollPane();		scrollPane.setBorder(BorderFactory.createEmptyBorder());		scrollPane.getViewport().setOpaque(false);		scrollPane.setVisible(false);		scrollPane.setOpaque(false);	}	/**	 * Returns the current editor or null if no editing is in progress.	 */	public Component getEditor()	{		if (textArea.getParent() != null)		{			return textArea;		}		else if (editingCell != null)		{			return editorPane;		}		return null;	}	/**	 * 	 */	public Rectangle getEditorBounds(mxCellState state)	{		mxIGraphModel model = state.getView().getGraph().getModel();		mxGeometry geometry = model.getGeometry(state.getCell());		Rectangle bounds = null;		if ((geometry != null && geometry.getOffset() != null && (geometry				.getOffset().getX() != 0 || geometry.getOffset().getY() != 0))				|| model.isEdge(state.getCell()))		{			bounds = state.getLabelBounds().getRectangle();			bounds.height += 10;		}		else		{			bounds = state.getRectangle();		}		// Applies the horizontal and vertical label positions		if (model.isVertex(state.getCell()))		{			String horizontal = mxUtils.getString(state.getStyle(),					mxConstants.STYLE_LABEL_POSITION, mxConstants.ALIGN_CENTER);			if (horizontal.equals(mxConstants.ALIGN_LEFT))			{				bounds.x -= state.getWidth();			}			else if (horizontal.equals(mxConstants.ALIGN_RIGHT))			{				bounds.x += state.getWidth();			}			String vertical = mxUtils.getString(state.getStyle(),					mxConstants.STYLE_VERTICAL_LABEL_POSITION,					mxConstants.ALIGN_MIDDLE);			if (vertical.equals(mxConstants.ALIGN_TOP))			{				bounds.y -= state.getHeight();			}			else if (vertical.equals(mxConstants.ALIGN_BOTTOM))			{				bounds.y += state.getHeight();			}		}		return bounds;	}	/*	 * (non-Javadoc)	 * @see com.mxgraph.swing.view.mxICellEditor#startEditing(java.lang.Object, java.util.EventObject)	 */	public void startEditing(Object cell, EventObject trigger)	{		if (editingCell != null)		{			stopEditing(true);		}		mxCellState state = graphComponent.getGraph().getView().getState(cell);		if (state != null)		{			double scale = Math.max(minimumEditorScale, graphComponent					.getGraph().getView().getScale());			JTextComponent currentEditor = null;			this.trigger = trigger;			editingCell = cell;			scrollPane.setBounds(getEditorBounds(state));			scrollPane.setSize(Math.max(scrollPane.getWidth(), (int) Math					.round(minimumWidth * scale)), Math.max(scrollPane					.getHeight(), (int) Math.round(minimumHeight * scale)));			scrollPane.setVisible(true);						String value = getInitialValue(state, trigger);			if (graphComponent.getGraph().isHtmlLabel(cell))			{				editorPane.setDocument(mxUtils.createHtmlDocument(state						.getStyle(), scale));				editorPane.setText(mxUtils.getBodyMarkup(value, true));				// Workaround for wordwrapping in editor pane				// FIXME: Cursor not visible at end of line				JPanel wrapper = new JPanel(new BorderLayout());				wrapper.setOpaque(false);				wrapper.add(editorPane, BorderLayout.CENTER);				scrollPane.setViewportView(wrapper);				currentEditor = editorPane;			}			else			{				textArea.setFont(mxUtils.getFont(state.getStyle(), scale));				Color fontColor = mxUtils.getColor(state.getStyle(),						mxConstants.STYLE_FONTCOLOR, Color.black);				textArea.setForeground(fontColor);				textArea.setText(value);				scrollPane.setViewportView(textArea);				currentEditor = textArea;			}			graphComponent.getGraphControl().add(scrollPane, 0);						if (isHideLabel(state))			{				graphComponent.redraw(state);			}			currentEditor.revalidate();			currentEditor.requestFocusInWindow();			currentEditor.selectAll();		}	}		/**	 * 	 */	protected boolean isHideLabel(mxCellState state)	{		return true;	}	/*	 * (non-Javadoc)	 * @see com.mxgraph.swing.view.mxICellEditor#stopEditing(boolean)	 */	public void stopEditing(boolean cancel)	{		if (editingCell != null)		{			scrollPane.transferFocusUpCycle();			Object cell = editingCell;			editingCell = null;			if (!cancel)			{				EventObject trig = trigger;				trigger = null;				graphComponent.labelChanged(cell, getCurrentValue(), trig);			}			else			{				mxCellState state = graphComponent.getGraph().getView()						.getState(cell);				graphComponent.redraw(state);			}			if (scrollPane.getParent() != null)			{				scrollPane.setVisible(false);				scrollPane.getParent().remove(scrollPane);			}			graphComponent.requestFocusInWindow();		}	}	/**	 * Gets the initial editing value for the given cell.	 */	protected String getInitialValue(mxCellState state, EventObject trigger)	{		return graphComponent.getEditingValue(state.getCell(), trigger);	}	/**	 * Returns the current editing value.	 */	public String getCurrentValue()	{		if (textArea.getParent() != null)		{			return textArea.getText();		}		return editorPane.getText();	}	/*	 * (non-Javadoc)	 * @see com.mxgraph.swing.view.mxICellEditor#getEditingCell()	 */	public Object getEditingCell()	{		return editingCell;	}	/**	 * @return the minimumEditorScale	 */	public double getMinimumEditorScale()	{		return minimumEditorScale;	}	/**	 * @param minimumEditorScale the minimumEditorScale to set	 */	public void setMinimumEditorScale(double minimumEditorScale)	{		this.minimumEditorScale = minimumEditorScale;	}	/**	 * @return the minimumWidth	 */	public int getMinimumWidth()	{		return minimumWidth;	}	/**	 * @param minimumWidth the minimumWidth to set	 */	public void setMinimumWidth(int minimumWidth)	{		this.minimumWidth = minimumWidth;	}	/**	 * @return the minimumHeight	 */	public int getMinimumHeight()	{		return minimumHeight;	}	/**	 * @param minimumHeight the minimumHeight to set	 */	public void setMinimumHeight(int minimumHeight)	{		this.minimumHeight = minimumHeight;	}}

⌨️ 快捷键说明

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