📄 texttool.java
字号:
/*
* @(#)TextTool.java 5.2
*
*/
package CH.ifa.draw.figures;
import java.awt.*;
import java.awt.event.*;
import CH.ifa.draw.framework.*;
import CH.ifa.draw.standard.*;
import CH.ifa.draw.util.FloatingTextField;
/**
* Tool to create new or edit existing text figures.
* The editing behavior is implemented by overlaying the
* Figure providing the text with a FloatingTextField.<p>
* A tool interaction is done once a Figure that is not
* a TextHolder is clicked.
*
* @see TextHolder
* @see FloatingTextField
*/
public class TextTool extends CreationTool {
private FloatingTextField fTextField;
private TextHolder fTypingTarget;
public TextTool(DrawingView view, Figure prototype) {
super(view, prototype);
}
/**
* If the pressed figure is a TextHolder it can be edited otherwise
* a new text figure is created.
*/
public void mouseDown(MouseEvent e, int x, int y)
{
TextHolder textHolder = null;
Figure pressedFigure = drawing().findFigureInside(x, y);
if (pressedFigure instanceof TextHolder) {
textHolder = (TextHolder) pressedFigure;
if (!textHolder.acceptsTyping())
textHolder = null;
}
if (textHolder != null) {
beginEdit(textHolder);
return;
}
if (getTypingTarget() != null) {
editor().toolDone();
endEdit();
} else {
super.mouseDown(e, x, y);
textHolder = (TextHolder)createdFigure();
beginEdit(textHolder);
}
}
public void mouseDrag(MouseEvent e, int x, int y) {
}
public void mouseUp(MouseEvent e, int x, int y) {
}
/**
* Terminates the editing of a text figure.
*/
public void deactivate() {
super.deactivate();
endEdit();
}
/**
* Sets the text cursor.
*/
public void activate() {
super.activate();
view().clearSelection();
// JDK1.1 TEXT_CURSOR has an incorrect hot spot
//view().setCursor(Cursor.getPredefinedCursor(Cursor.TEXT_CURSOR));
}
/**
* Test whether the text tool is currently activated and is displaying
* a overlay TextFigure for accepting input.
*
* @return true, if the text tool has a accepting target TextFigure for its input, false otherwise
*/
public boolean isActivated() {
return getTypingTarget() != null;
}
protected void beginEdit(TextHolder figure) {
if (fTextField == null)
fTextField = new FloatingTextField();
if (figure != getTypingTarget() && getTypingTarget() != null)
endEdit();
fTextField.createOverlay((Container)view(), figure.getFont());
fTextField.setBounds(fieldBounds(figure), figure.getText());
setTypingTarget(figure);
view().checkDamage();
}
protected void endEdit() {
if (getTypingTarget() != null) {
if (fTextField.getText().length() > 0)
getTypingTarget().setText(fTextField.getText());
else {
drawing().remove((Figure)getTypingTarget());
}
setTypingTarget(null);
fTextField.endOverlay();
view().checkDamage();
}
}
private Rectangle fieldBounds(TextHolder figure) {
Rectangle box = figure.textDisplayBox();
int nChars = figure.overlayColumns();
Dimension d = fTextField.getPreferredSize(nChars);
return new Rectangle(box.x, box.y, d.width, d.height);
}
protected void setTypingTarget(TextHolder newTypingTarget) {
fTypingTarget = newTypingTarget;
}
protected TextHolder getTypingTarget() {
return fTypingTarget;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -