如何垂直居中JTextPane中的文本和JComponent?

ka3*_*3ak 4 java swing jtextpane jcomponent alignment

目前它看起来如此

在此输入图像描述

怎么做它看起来如此?

在此输入图像描述

以下是我的代码:

    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);
Run Code Online (Sandbox Code Playgroud)

我发现接近这个主题的单个问题:JTextPane插入组件,错误的垂直对齐 但是如何更改对齐没有答案.但根据那里的讨论,它必须是可能的.

Sta*_*avL 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) 
Run Code Online (Sandbox Code Playgroud)

返回CENTER(0.5).如果这没有帮助覆盖layoutMinorAxis(0返回正确的偏移量(移位).