?? newtextpane.java
字號:
package com.ecust.swing;
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.undo.*;
import javax.swing.text.*;
import javax.swing.plaf.*;
import java.io.*;
public class NewTextPane extends JTextPane {
private static final long serialVersionUID = 7304819262700499868L;
private static int tab = 10;
private boolean saved;
private static boolean lineWrap;
private Font font = new Font( "serif", Font.PLAIN, 12 );
private StyleContext context = new StyleContext();
private DefaultStyledDocument doc = new DefaultStyledDocument( context );
private Element rootElement = doc.getDefaultRootElement();
private Style logicalStyle = doc.getLogicalStyle( 0 );
private transient UndoManager undoManager = new UndoManager();
private File path;
private boolean isStyledModified = false;
private int cursorPos = getCaretPosition();
private int row;
private Element para = rootElement.getElement(row);
private int col;
private int length;
private int start;
private int end;
private String content = "";
private String lineContent = "";
private double percent = 0;
public NewTextPane() {
setDocument( doc );
setRowCol();
setSelectedTextColor( Color.white );
setSelectionColor( new Color( 0, 102, 255 ) );
doc.addDocumentListener( new DocL() );
doc.addUndoableEditListener( new UndoableEditL() );
addCaretListener( new CaretL() );
}
public void setIsStyledModified( boolean isStyledModified ) {
this.isStyledModified = isStyledModified;
setSaved( false );
}
public boolean getIsStyledModified() {
return isStyledModified;
}
public void setPath( File path ) {
this.path = path;
}
public File getPath() {
return path;
}
public void setLineWrap( boolean lw ) {
lineWrap = lw;
}
public boolean getScrollableTracksViewportWidth() {
boolean flag = false;
if ( lineWrap ) {
flag = super.getScrollableTracksViewportWidth();
} else {
Component parent = getParent();
ComponentUI ui = getUI();
flag = ( parent !=
null ? ( ui.getPreferredSize(this).width
<= parent.getSize().width ) : true );
}
return flag;
}
public boolean getSaved() {
return saved;
}
public void setSaved( boolean saved ) {
this.saved = saved;
}
public int getFontSize() {
return font.getSize();
}
public void setFontSize( int fontSize ) {
font = new Font( font.getName(), font.getStyle(), fontSize );
}
public Style getLogicalStyle() {
return logicalStyle;
}
public UndoManager getUndoManager() {
return undoManager;
}
public void setUndoManager( UndoManager undoManager ) {
this.undoManager = undoManager;
}
public DefaultStyledDocument getDoc() {
return doc;
}
public void setRowCol() {
cursorPos = NewTextPane.this.getCaretPosition();
row = rootElement.getElementIndex(cursorPos);
para = rootElement.getElement(row);
start = para.getStartOffset();
end = para.getEndOffset() - 1;
try {
content = doc.getText(start, cursorPos - start );
lineContent = doc.getText( start, end - start );
} catch (BadLocationException ex) {
ex.printStackTrace( System.err );
}
col = 0;
for ( int i = 0; i < content.length(); i++ ) {
if ( content.charAt( i ) == '\t' ) {
col += tab;
} else {
col++;
}
}
double num = 0;
for ( int i = 0; i < lineContent.length(); i++ ) {
if ( lineContent.charAt( i ) == '\t' ) {
num += tab;
} else {
num++;
}
}
if ( num != 0 )
percent = col / num;
else
percent = 0;
length = doc.getLength();
}
public int getRow() {
return row;
}
public int getCol() {
return col;
}
public String getPercent() {
percent *= 100;
String s = percent + "";
int index = s.indexOf( "." );
if ( index != -1 ) {
s = s.substring( 0, index );
}
return s + "%";
}
public int getLength() {
return length;
}
private class UndoableEditL implements UndoableEditListener {
public void undoableEditHappened( UndoableEditEvent event ) {
undoManager.addEdit( event.getEdit() );
}
}
private class CaretL implements CaretListener {
public void caretUpdate( CaretEvent e ) {
setRowCol();
RealEditorFrame.getStatusLabel().setText(
"Row: " + ( row + 1 ) +
" Col: " + ( col + 1 ) +
" Percent: " + getPercent() +
" Length: " + length );
}
}
private class DocL implements DocumentListener {
public void insertUpdate( DocumentEvent e ) {
saved = false;
}
public void removeUpdate( DocumentEvent e ) {
saved = false;
}
public void changedUpdate( DocumentEvent e ) {
//saved = false;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -