目前它看起来如此
怎么做才能看起来如此?
以下是我的代码:
JFrame f = new JFrame();
JTextPane textPane = new JTextPane();
JTextField component = new JTextField(" ");
component.setMaximumSize(component.getPreferredSize());
textPane.setSelectionStart(textPane.getDocument().getLength());
textPane.setSelectionEnd(textPane.getDocument().getLength());
textPane.insertComponent(component);
try {
textPane.getDocument().insertString(textPane.getDocument().getLength(), "text",
new SimpleAttributeSet());
} catch (BadLocationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
f.add(new JScrollPane(textPane));
f.setSize(200, 100);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
我找到了与此主题相近的单个问题:JTextPane insert component, faulty vertical alignment 但是没有答案如何改变对齐方式。但根据那里的讨论,它必须是可能的。
答案 0 :(得分:7)
您可以使用此http://java-sl.com/tip_center_vertically.html
它也应该与JComponents
一起使用。
您还可以覆盖LabelView's
getPreferredSpan()
在底部添加一些空格。
或者,您可以尝试覆盖RowView
ParagraphView
内部类
指向内部类Row扩展BoxView
您应该用自己的替换它。尝试覆盖
public float getAlignment(int axis)
返回CENTER(0.5)。如果这没有帮助覆盖layoutMinorAxis(0则返回正确的偏移量(移位)。
答案 1 :(得分:1)
使用JLabel为文档定义样式并在其上设置垂直对齐:
Style s = doc.addStyle("icUf", regular);
ImageIcon icUf = createImageIcon("uf.png", "Unidad Funcional");
if (icUf != null) {
JLabel jl = new JLabel(icUf);
jl.setVerticalAlignment(JLabel.CENTER);
StyleConstants.setComponent(s, jl);
}
插入标签:
doc.insertString(doc.getLength(), " ", doc.getStyle("icUf"));
和文字:
doc.insertString(doc.getLength(), " text ", doc.getStyle("bold"));
答案 2 :(得分:1)
基于上面的答案(这对我不起作用,但帮助我找到了这个),我用过:
Style s = doc.addStyle("icUf", regular);
ImageIcon icUf = createImageIcon("uf.png", "Unidad Funcional");
if (icUf != null) {
// create label with icon AND text
JLabel jl = new JLabel("some text",icUf, SwingConstants.LEFT);
StyleConstants.setComponent(s, jl);
}
doc.insertString(doc.getLength(), " ", doc.getStyle("icUf"))
这使文本'某些文字'和图标正确对齐。