📄 rtextareabase.java
字号:
* garbage when the user scrolls via the arrow keys. Thus we
* need setOpaque to be false in that case.<p>
* You never have to change the opaque property yourself; it is always done
* for you.
*
* @param bg The color to use as the background color.
*/
public void setBackground(Color bg) {
Object oldBG = getBackgroundObject();
if (oldBG instanceof Color) { // Just change color of strategy.
( (ColorBackgroundPainterStrategy) backgroundPainter).
setColor(bg);
}
else { // Was an image painter...
backgroundPainter = new ColorBackgroundPainterStrategy(bg);
}
setOpaque(true);
firePropertyChange("background", oldBG, bg);
repaint();
}
/*****************************************************************************/
/**
* Sets this image as the background image.<p>
*
* NOTE: the opaque property is set to <code>true</code> when the
* background is set to a color. When an image is used for the
* background (by this method), opaque is set to false. This is because
* we perform better when setOpaque is true, but if we use an
* image for the background when opaque is true, we get on-screen
* garbage when the user scrolls via the arrow keys. Thus we
* need setOpaque to be false in that case.<p>
* You never have to change the opaque property yourself; it is always done
* for you.
*
* @param image The image to use as this text area's background.
* @see #getBackgroundImage
*/
public void setBackgroundImage(Image image) {
Object oldBG = getBackgroundObject();
if (oldBG instanceof Image) { // Just change image being displayed.
( (BufferedImageBackgroundPainterStrategy) backgroundPainter).
setImage(image);
}
else { // Was a color strategy...
BufferedImageBackgroundPainterStrategy strategy =
new BufferedImageBackgroundPainterStrategy(this);
strategy.setImage(image);
backgroundPainter = strategy;
}
setOpaque(false);
firePropertyChange("background.image", oldBG, image);
repaint();
}
/*****************************************************************************/
/**
* Makes the background into this <code>Object</code>.
*
* @param newBackground The <code>java.awt.Color</code> or
* <code>java.awt.Image</code> object.
* If <code>newBackground</code> is not either of
* these, the background is set to plain white.
*/
public void setBackgroundObject(Object newBackground) {
if (newBackground instanceof Color) {
setBackground( (Color) newBackground);
}
else if (newBackground instanceof Image) {
setBackgroundImage( (Image) newBackground);
}
else {
setBackground(Color.WHITE);
}
}
/*****************************************************************************/
/**
* Sets the color to use to highlight the current line. Note that if
* highlighting the current line is turned off, you will not be able to
* see this highlight. This method fires a property change of type
* <code>CURRENT_LINE_HIGHLIGHT_COLOR_PROPERTY</code>.
*
* @param color The color to use to highlight the current line.
* @throws NullPointerException if <code>color</code> is <code>null</code>.
* @see #isCurrentLineHighlightEnabled
* @see #setCurrentLineHighlightEnabled
* @see #getCurrentLineHighlightColor
*/
public void setCurrentLineHighlightColor(Color color) throws
NullPointerException {
if (color == null) {
throw new NullPointerException();
}
if (!color.equals(currentLineColor)) {
Color old = currentLineColor;
currentLineColor = color;
firePropertyChange(CURRENT_LINE_HIGHLIGHT_COLOR_PROPERTY,
old, color);
}
}
/*****************************************************************************/
/**
* Sets whether or not the current line is highlighted. This method
* fires a property change of type
* <code>CURRENT_LINE_HIGHLIGHT_PROPERTY</code>.
*
* @param enabled Whether or not to highlight the current line.
* @see #isCurrentLineHighlightEnabled
* @see #getCurrentLineHighlightColor
* @see #setCurrentLineHighlightColor
*/
public void setCurrentLineHighlightEnabled(boolean enabled) {
if (enabled != highlightCurrentLine) {
highlightCurrentLine = enabled;
firePropertyChange(CURRENT_LINE_HIGHLIGHT_PROPERTY,
!enabled, enabled);
}
}
/*****************************************************************************/
/**
* Sets whether the current line highlight should have a "fade" effect.
* This method fires a property change event of type
* <code>CURRENT_LINE_HIGHLIGHT_FADE_PROPERTY</code>.
*
* @param fade Whether the fade effect should be enabled.
* @see #getFadeCurrentLineHighlight
*/
public void setFadeCurrentLineHighlight(boolean fade) {
if (fade != fadeCurrentLineHighlight) {
fadeCurrentLineHighlight = fade;
if (isCurrentLineHighlightEnabled()) {
repaint();
}
firePropertyChange(CURRENT_LINE_HIGHLIGHT_FADE_PROPERTY,
!fade, fade);
}
}
/*****************************************************************************/
/**
* Sets the font for this text area. This is overridden only so that we
* can update the size of the "current line highlight" and the location of
* the "margin line," if necessary.
*
* @param font The font to use for this text component.
*/
public void setFont(Font font) {
super.setFont(font);
updateMarginLineX();
if (highlightCurrentLine) {
possiblyUpdateCurrentLineHighlightLocation();
}
}
/*****************************************************************************/
/**
* Sets whether or not word wrap is eanbled. This is overridden so that
* the "current line highlight" gets updated if it needs to be.
*
* @param wrap Whether or not word wrap should be enabled.
*/
public void setLineWrap(boolean wrap) {
super.setLineWrap(wrap);
forceCurrentLineHighlightRepaint();
}
/*****************************************************************************/
/**
* Sets the color used to paint the margin line.
*
* @param color The new margin line color.
* @see #getDefaultMarginLineColor
* @see #getMarginLineColor
*/
public void setMarginLineColor(Color color) {
marginLineColor = color;
if (marginLineEnabled) {
Rectangle visibleRect = getVisibleRect();
repaint(marginLineX, visibleRect.y,
marginLineX, visibleRect.y + visibleRect.height);
}
}
/*****************************************************************************/
/**
* Enables or disables the margin line.
*
* @param enabled Whether or not the margin line should be enabled.
* @see #isMarginLineEnabled
*/
public void setMarginLineEnabled(boolean enabled) {
if (enabled != marginLineEnabled) {
marginLineEnabled = enabled;
if (marginLineEnabled) {
Rectangle visibleRect = getVisibleRect();
repaint(marginLineX, visibleRect.y,
marginLineX, visibleRect.y + visibleRect.height);
}
}
}
/*****************************************************************************/
/**
* Sets the number of 'm' widths the margin line is over.
*
* @param size The margin size.
* #see #getDefaultMarginLinePosition
* @see #getMarginLinePosition
*/
public void setMarginLinePosition(int size) {
marginSizeInChars = size;
if (marginLineEnabled) {
Rectangle visibleRect = getVisibleRect();
repaint(marginLineX, visibleRect.y,
marginLineX, visibleRect.y + visibleRect.height);
updateMarginLineX();
repaint(marginLineX, visibleRect.y,
marginLineX, visibleRect.y + visibleRect.height);
}
}
/*****************************************************************************/
/**
* Sets whether the edges of selections are rounded in this text area.
* This method fires a property change of type
* <code>ROUNDED_SELECTION_PROPERTY</code>.
*
* @param rounded Whether selection edges should be rounded.
* @see #getRoundedSelectionEdges
*/
public void setRoundedSelectionEdges(boolean rounded) {
if (roundedSelectionEdges != rounded) {
roundedSelectionEdges = rounded;
ConfigurableCaret cc = (ConfigurableCaret) getCaret();
cc.setRoundedSelectionEdges(rounded);
repaint();
firePropertyChange(ROUNDED_SELECTION_PROPERTY, !rounded,
rounded);
}
}
/*****************************************************************************/
/**
* Sets the UI for this <code>RTextArea</code>. Note that, for instances
* of <code>RTextArea</code>, <code>setUI</code> only updates the popup
* menu; this is because <code>RTextArea</code>s' look and feels are
* independent of the Java Look and Feel. This method is here so
* subclasses can set a UI (subclass of <code>RTextAreaUI</code>) if they
* have to.
*
* @param ui The new UI.
* @see #setUI
*/
private void setRTextAreaUI(RTextAreaUI ui) {
super.setUI(ui);
// Workaround as setUI makes the text area opaque, even if we don't
// want it to be.
setOpaque(getBackgroundObject()instanceof Color);
}
/*****************************************************************************/
/**
* Changes whether or not tabs should be emulated with spaces (i.e., soft
* tabs). Note that this affects all tabs inserted AFTER this call, not
* tabs already in the document. For that, see
* {@link #convertTabsToSpaces} and {@link #convertSpacesToTabs}.
*
* @param areEmulated Whether or not tabs should be emulated with spaces.
* @see #convertSpacesToTabs
* @see #convertTabsToSpaces
* @see #getTabsEmulated
*/
public void setTabsEmulated(boolean areEmulated) {
tabsEmulatedWithSpaces = areEmulated;
}
/*****************************************************************************/
/**
* Workaround, since in JDK1.4 it appears that <code>setTabSize()</code>
* doesn't work for a <code>JTextArea</code> unless you use the constructor
* specifying the number of rows and columns...<p>
* Sets the number of characters to expand tabs to. This will be multiplied
* by the maximum advance for variable width fonts. A PropertyChange event
* ("tabSize") is fired when the tab size changes.
*
* @param size Number of characters to expand to.
*/
public void setTabSize(int size) {
super.setTabSize(size);
boolean b = getLineWrap();
setLineWrap(!b);
setLineWrap(b);
}
/*****************************************************************************/
/**
* This is here so subclasses such as <code>RSyntaxTextArea</code> that
* have multiple fonts can define exactly what it means, for example, for
* the margin line to be "80 characters" over.
*/
protected void updateMarginLineX() {
marginLineX = getFontMetrics(getFont()).charWidth('m') *
marginSizeInChars;
}
/*****************************************************************************/
/********************** INNER CLASSES ****************************************/
/*****************************************************************************/
protected class RTAMouseListener
extends CaretEvent
implements
MouseListener, MouseMotionListener, FocusListener {
/**
*
*/
private static final long serialVersionUID = 5409600229096811489L;
RTAMouseListener(RTextAreaBase textArea) {
super(textArea);
}
public void focusGained(FocusEvent e) {}
public void focusLost(FocusEvent e) {}
public void mouseDragged(MouseEvent e) {}
public void mouseMoved(MouseEvent e) {}
public void mouseClicked(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public int getDot() {
return dot;
}
public int getMark() {
return mark;
}
protected int dot;
protected int mark;
}
/*****************************************************************************/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -