我有一段代码,它使用 JTextArea 来显示一些文字,
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.text.DefaultCaret;
public class TextPane extends JFrame{
public static TextPane instance;
//private static JTextPane pane = new JTextPane(); //Uncomment to see alignment issue
private static JTextArea pane = new JTextArea(); // alignment works fine
private static JScrollPane scroll = new JScrollPane();
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
TextPane.getInstance().init();
}
});
}
private static TextPane getInstance() {
if(null == instance){
instance = new TextPane();
}
return instance;
}
private void init() {
pane.setFont(new Font("Courier new", Font.PLAIN, 12));
pane.setLayout(new BorderLayout());
pane.setFocusCycleRoot(true);
pane.setFocusTraversalKeysEnabled(false);
pane.setBackground(Color.black);
pane.setForeground(Color.white);
pane.setCaretColor(Color.green);
pane.setDragEnabled(false);
pane.setText("IOC_CONFUG_MMM.lag hkess.lag\t\t papdifs.lag\r\nMemSys.lag.txt\t eol.lag1\t\t papdifs.lag2\r\nopp.lag\t\t eol.lag2\t\t papm_by.lag1\r\n");
DefaultCaret caret = (DefaultCaret) pane.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
scroll.setViewportView(pane);
add(scroll);
setTitle("Test");
setSize(800 , 800);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(true);
setVisible(true);
}
}
最初对齐setText字符串存在问题,但是在我添加字体为 Courier New 之后我解决了它(如果我删除 setFont 对齐将无效。 )
最近由于一些要求我从 JtextArea 更改为 JTextPane ,现在使用相同的代码,文本在JTextPane中没有正确对齐但如果我将其更改为JTextArea对齐工作正常。
我无法理解这种行为。如何在JTextPane中实现对齐。请帮忙。
答案 0 :(得分:3)
JTextPane
(或您隐式使用的编辑器工具包)有关于制表符放置的不同默认行为,这是因为它旨在包含比JTextArea
更复杂的内容。您可以手动创建所需的简单固定宽度字体选项卡位置并显式设置。只需在setText(…);
上调用pane
之前插入以下行:
int w=pane.getFontMetrics(pane.getFont()).charWidth(' ');
TabStop[] stops={ new TabStop(0), new TabStop(w*8), new TabStop(w*16),
new TabStop(w*24), new TabStop(w*32), new TabStop(w*40), new TabStop(w*48),
new TabStop(w*56), new TabStop(w*64), new TabStop(w*72), new TabStop(w*80) };
MutableAttributeSet attrs=new SimpleAttributeSet();
StyleConstants.setTabSet(attrs, new TabSet(stops) );
pane.setParagraphAttributes(attrs, false);