下面列出了怎么用javax.swing.text.TabStop的API类实例代码及写法,或者点击链接到github查看源代码。
/** Changes the font and tabsize for the document. */
public final void do_setFont(String fontName, int fontSize, int tabSize) {
if (tabSize < 1)
tabSize = 1;
else if (tabSize > 100)
tabSize = 100;
if (fontName.equals(this.font) && fontSize == this.fontSize && tabSize == this.tabSize)
return;
this.font = fontName;
this.fontSize = fontSize;
this.tabSize = tabSize;
for (MutableAttributeSet s : all) {
StyleConstants.setFontFamily(s, fontName);
StyleConstants.setFontSize(s, fontSize);
}
do_reapplyAll();
BufferedImage im = new BufferedImage(10, 10, BufferedImage.TYPE_INT_RGB); // this
// is
// used
// to
// derive
// the
// tab
// width
int gap = tabSize * im.createGraphics().getFontMetrics(new Font(fontName, Font.PLAIN, fontSize)).charWidth('X');
TabStop[] pos = new TabStop[100];
for (int i = 0; i < 100; i++) {
pos[i] = new TabStop(i * gap + gap);
}
StyleConstants.setTabSet(tabset, new TabSet(pos));
setParagraphAttributes(0, getLength(), tabset, false);
}
@SuppressWarnings("PMD.AvoidInstantiatingObjectsInLoops")
@Override public void install(JEditorPane c) {
FontMetrics fm = c.getFontMetrics(c.getFont());
int tabLength = fm.charWidth('m') * 4;
TabStop[] tabs = new TabStop[100];
for (int j = 0; j < tabs.length; j++) {
tabs[j] = new TabStop((j + 1f) * tabLength);
}
TabSet tabSet = new TabSet(tabs);
StyleConstants.setTabSet(ATTRS, tabSet);
super.install(c);
}
private MainPanel() {
super(new BorderLayout());
JTextPane textPane = new JTextPane();
textPane.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12));
FontMetrics fm = textPane.getFontMetrics(textPane.getFont());
float charWidth = fm.charWidth('m');
float tabWidth = charWidth * 4f;
TabStop[] tabs = new TabStop[10];
for (int j = 0; j < tabs.length; j++) {
tabs[j] = createTabStop((j + 1) * tabWidth);
}
TabSet tabSet = new TabSet(tabs);
// MutableAttributeSet attributes = new SimpleAttributeSet();
MutableAttributeSet attributes = textPane.getStyle(StyleContext.DEFAULT_STYLE);
StyleConstants.setTabSet(attributes, tabSet);
// int length = textPane.getDocument().getLength();
// textPane.getStyledDocument().setParagraphAttributes(0, length, attributes, false);
textPane.setParagraphAttributes(attributes, false);
textPane.setText("JTextPane\n0123\n\t4567\n\t\t89ab\n");
JTextArea textArea = new JTextArea();
textArea.setTabSize(4);
textArea.setText("JTextArea\n0123\n\t4567\n\t\t89ab\n");
add(new JScrollPane(textArea), BorderLayout.NORTH);
add(new JScrollPane(textPane));
setPreferredSize(new Dimension(320, 240));
}
@Override public void updateUI() {
super.updateUI();
setOpaque(false);
putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, Boolean.TRUE);
EventQueue.invokeLater(() -> {
// MutableAttributeSet attr = new SimpleAttributeSet();
Style attr = getStyle(StyleContext.DEFAULT_STYLE);
TabStop[] ts = {new TabStop(25f, TabStop.ALIGN_DECIMAL, TabStop.LEAD_NONE)};
StyleConstants.setTabSet(attr, new TabSet(ts));
setParagraphAttributes(attr, false);
});
}
public JavaSourceDocument(String title, Reader in, SourceFile theSource) throws IOException {
doc = new DefaultStyledDocument();
this.title = title;
this.sourceFile = theSource;
Debug.println("Created JavaSourceDocument for " + title);
try {
dek.read(in, doc, 0);
} catch (BadLocationException e) {
throw new RuntimeException(e);
}
in.close();
doc.putProperty(Document.TitleProperty, title);
// root = doc.getDefaultRootElement();
Toolkit toolkit = Toolkit.getDefaultToolkit();
FontMetrics fontMetrics = toolkit.getFontMetrics(sourceFont);
TabStop[] tabs = new TabStop[50];
float width = fontMetrics.stringWidth(" ");
int tabSize = GUISaveState.getInstance().getTabSize();
for (int i = 0; i < tabs.length; i++) {
tabs[i] = new TabStop(width * (tabSize + tabSize * i));
}
TAB_SET = new TabSet(tabs);
StyleConstants.setTabSet(commentAttributes, TAB_SET);
StyleConstants.setTabSet(javadocAttributes, TAB_SET);
StyleConstants.setTabSet(quotesAttributes, TAB_SET);
StyleConstants.setTabSet(keywordsAttributes, TAB_SET);
StyleConstants.setTabSet(commentAttributes, TAB_SET);
StyleConstants.setTabSet(whiteAttributes, TAB_SET);
StyleConstants.setFontFamily(whiteAttributes, sourceFont.getFamily());
StyleConstants.setFontSize(whiteAttributes, sourceFont.getSize());
StyleConstants.setLeftIndent(whiteAttributes, NumberedParagraphView.NUMBERS_WIDTH);
doc.setParagraphAttributes(0, doc.getLength(), whiteAttributes, true);
JavaScanner parser = new JavaScanner(new DocumentCharacterIterator(doc));
while (parser.next() != JavaScanner.EOF) {
int kind = parser.getKind();
switch (kind) {
case JavaScanner.COMMENT:
doc.setCharacterAttributes(parser.getStartPosition(), parser.getLength(), commentAttributes, true);
break;
case JavaScanner.KEYWORD:
doc.setCharacterAttributes(parser.getStartPosition(), parser.getLength(), keywordsAttributes, true);
break;
case JavaScanner.JAVADOC:
doc.setCharacterAttributes(parser.getStartPosition(), parser.getLength(), javadocAttributes, true);
break;
case JavaScanner.QUOTE:
doc.setCharacterAttributes(parser.getStartPosition(), parser.getLength(), quotesAttributes, true);
break;
default:
break;
}
}
}
private static TabStop createTabStop(float pos) {
return new TabStop(pos);
}
private MainPanel() {
super(new BorderLayout());
JCheckBox check = new JCheckBox("vertical grid lines", true);
check.addActionListener(e -> repaint());
JTextPane textPane = new JTextPane() {
@Override protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (check.isSelected()) {
int ox = getInsets().left;
int h = getHeight();
g.setColor(Color.RED);
g.drawLine(ox, 0, ox, h);
g.drawLine(ox + 100, 0, ox + 100, h);
g.drawLine(ox + 200, 0, ox + 200, h);
g.drawLine(ox + 300, 0, ox + 300, h);
g.setColor(Color.ORANGE);
g.drawLine(ox + 50, 0, ox + 50, h);
g.drawLine(ox + 150, 0, ox + 150, h);
g.drawLine(ox + 250, 0, ox + 250, h);
}
}
};
textPane.setText(String.join("\n",
String.join("\t", "LEFT1", "CENTER1", "RIGHT1", "3.14"),
String.join("\t", "LEFT22", "CENTER22", "RIGHT22", "12.3"),
String.join("\t", "LEFT333", "CENTER333", "RIGHT333", "123.45"),
String.join("\t", "LEFT4444", "CENTER4444", "RIGHT4444", "0.9876")));
// MutableAttributeSet attr = new SimpleAttributeSet();
Style attr = textPane.getStyle(StyleContext.DEFAULT_STYLE);
StyleConstants.setTabSet(attr, new TabSet(new TabStop[] {
new TabStop(0f, TabStop.ALIGN_LEFT, TabStop.LEAD_NONE),
new TabStop(100f, TabStop.ALIGN_CENTER, TabStop.LEAD_NONE),
new TabStop(200f, TabStop.ALIGN_RIGHT, TabStop.LEAD_NONE),
new TabStop(250f, TabStop.ALIGN_DECIMAL, TabStop.LEAD_NONE)
// new TabStop(300f, TabStop.ALIGN_BAR, TabStop.LEAD_NONE)
}));
textPane.setParagraphAttributes(attr, false);
// textPane.getStyledDocument().setParagraphAttributes(0, textPane.getDocument().getLength(), attr, false);
add(new JScrollPane(textPane));
add(check, BorderLayout.SOUTH);
setPreferredSize(new Dimension(320, 240));
}