4

目前看起来如此

在此处输入图像描述

该怎么做才能让它看起来如此?

在此处输入图像描述

下面是我的代码:

    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 插入组件,垂直对齐错误 但是没有答案如何更改对齐方式。但根据那里的讨论,它必须是可能的。

4

3 回答 3

7

你可以使用这个http://java-sl.com/tip_center_vertically.html

它也应该适用JComponents

您还可以覆盖LabelView's getPreferredSpan()在底部添加一些空间。

或者,您可以尝试覆盖RowView内部类ParagraphView

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/javax/swing/text/ParagraphView.java#ParagraphView.Row

那指向内部类 Row 扩展 BoxView

你应该用自己的替换它。尝试覆盖

public float getAlignment(int axis) 

返回中心 (0.5)。如果这无助于覆盖 layoutMinorAxis(0 以返回正确的偏移量(移位)。

于 2012-12-18T13:12:38.753 回答
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"));
于 2013-10-03T08:40:55.083 回答
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"))

这正确对齐了文本“一些文本”和图标。

于 2013-11-18T12:59:53.340 回答