Java在JTextPane上设置缩进大小
我想将Java在JTextPane上设置缩进大小,java,swing,jtextpane,styleddocument,Java,Swing,Jtextpane,Styleddocument,我想将JTextPane中制表符\t的大小设置为4个空格宽 在谷歌搜索了相当一段时间后,我发现了一些东西,我将在这里介绍我所做的尝试,以及它们失败的原因 JTextPane不是普通文档 Eclipse引发了一些错误: Type mismatch: cannot convert from javax.swing.text.AttributeSet to javax.print.attribute.AttributeSet 及 本页讨论如何使用JTextPane设置样式。我从中改编的代码
JTextPane
中制表符\t的大小设置为4个空格宽
在谷歌搜索了相当一段时间后,我发现了一些东西,我将在这里介绍我所做的尝试,以及它们失败的原因
JTextPane
不是普通文档
Eclipse引发了一些错误:
Type mismatch: cannot convert from javax.swing.text.AttributeSet to
javax.print.attribute.AttributeSet
及
本页讨论如何使用JTextPane
设置样式。我从中改编的代码如下:
MutableAttributeSet set = new SimpleAttributeSet(pane.getParagraphAttributes());
StyleConstants.setLeftIndent(set, 40);
StyleConstants.setRightIndent(set, 40);
我想将JTextPane中制表符\t的大小设置为4个空格宽
import java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
导入javax.swing.text.*;
导入javax.swing.event.*;
公共类textpanetab
{
公共静态void setTabs(最终JTextPane textPane,int charactersPerTab)
{
FontMetrics fm=textPane.getFontMetrics(textPane.getFont());
//int charWidth=fm.charWidth('w');
int charWidth=fm.charWidth(“”);
int tabWidth=charWidth*charactersPerTab;
//int tabWidth=100;
TabStop[]tabs=新TabStop[5];
对于(int j=0;j
当然,当使用JTextPane的默认字体时,空格的宽度不是很宽,因此实际的选项卡不会那么大。从链接
“我想将
JTextPane
中缩进的大小设置为4。”4什么?像素、字符……英寻?我不清楚你所说的缩进是什么意思。这只是文本窗格边缘和实际文本之间的空间吗?如果是这样,只需将其边框设置为适当大小的空顺序。我不明白“缩进大小”对您意味着什么。通常,缩进是距离左边缘的空间,您不会解释为什么setLeftIndent(…)
方法不起作用。我认为这是你应该使用的解决方案。但是,您还谈到了制表符,它基于文本窗格的数据,而不是一行文本的起始缩进。您确定没有导入错误的类吗?您应该使用“import javax.swing.text.AttributeSet”而不是“import javax.print.attribute.AttributeSet”@FredK,缩进我的意思是选项卡的大小,“/t”,字符。实际上,普通选项卡的大小太大了。它大约有10格宽。如果宽度相当大,5个挡块是不够的。它还取决于字体。5个制表位是不够的。
-是的,很容易将数组大小更改为更真实的值。
MutableAttributeSet set = new SimpleAttributeSet(pane.getParagraphAttributes());
StyleConstants.setLeftIndent(set, 40);
StyleConstants.setRightIndent(set, 40);
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;
import javax.swing.event.*;
public class TextPaneTabs
{
public static void setTabs( final JTextPane textPane, int charactersPerTab)
{
FontMetrics fm = textPane.getFontMetrics( textPane.getFont() );
// int charWidth = fm.charWidth( 'w' );
int charWidth = fm.charWidth( ' ' );
int tabWidth = charWidth * charactersPerTab;
// int tabWidth = 100;
TabStop[] tabs = new TabStop[5];
for (int j = 0; j < tabs.length; j++)
{
int tab = j + 1;
tabs[j] = new TabStop( tab * tabWidth );
}
TabSet tabSet = new TabSet(tabs);
SimpleAttributeSet attributes = new SimpleAttributeSet();
StyleConstants.setTabSet(attributes, tabSet);
int length = textPane.getDocument().getLength();
textPane.getStyledDocument().setParagraphAttributes(0, length, attributes, false);
}
private static void createAndShowUI()
{
JTextPane textPane = new JTextPane();
textPane.setText("12345678\n\t1\t2\t3aaaaa\t4\t5\t6\t7\t8\n\t1\t2\t3\t4\t5\t6\t7\t8\n\t\t12345678");
JScrollPane scrollPane = new JScrollPane( textPane );
scrollPane.setPreferredSize( new Dimension(700, 100 ) );
// Change the tab size to 4 characters
setTabs( textPane, 4 );
JFrame frame = new JFrame("SSCCE");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add( scrollPane );
frame.setLocationByPlatform( true );
frame.pack();
frame.setVisible( true );
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowUI();
}
});
}
}
import javax.swing.text.*;
import javax.swing.*;
public class TabSizeEditorKit extends StyledEditorKit {
public static final int TAB_SIZE=36;
public ViewFactory getViewFactory() {
return new MyViewFactory();
}
static class MyViewFactory implements ViewFactory {
public View create(Element elem) {
String kind = elem.getName();
if (kind != null) {
if (kind.equals(AbstractDocument.ContentElementName)) {
return new LabelView(elem);
} else if (kind.equals(AbstractDocument.ParagraphElementName)) {
return new CustomTabParagraphView(elem);
} else if (kind.equals(AbstractDocument.SectionElementName)) {
return new BoxView(elem, View.Y_AXIS);
} else if (kind.equals(StyleConstants.ComponentElementName)) {
return new ComponentView(elem);
} else if (kind.equals(StyleConstants.IconElementName)) {
return new IconView(elem);
}
}
return new LabelView(elem);
}
}
public static void main(String[] args) {
JFrame frame=new JFrame("Custom default Tab Size in EditorKit example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JEditorPane edit=new JEditorPane();
edit.setEditorKit(new TabSizeEditorKit());
try {
edit.getDocument().insertString(0,"1\t2\t3\t4\t5", new SimpleAttributeSet());
} catch (BadLocationException e) {
e.printStackTrace();
}
frame.getContentPane().add(new JScrollPane(edit));
frame.setSize(300,100);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
static class CustomTabParagraphView extends ParagraphView {
public CustomTabParagraphView(Element elem) {
super(elem);
}
public float nextTabStop(float x, int tabOffset) {
TabSet tabs = getTabSet();
if(tabs == null) {
// a tab every 72 pixels.
return (float)(getTabBase() + (((int)x / TAB_SIZE + 1) * TAB_SIZE));
}
return super.nextTabStop(x, tabOffset);
}
}
}