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

标签 java swing alignment jtextpane jcomponent

目前看起来是这样

enter image description here

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

enter image description here

下面是我的代码:

    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 但是没有答案如何更改对齐方式。但根据那里的讨论,这一定是可能的。

最佳答案

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

它也应该与 JComponents 一起工作。

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

或者你可以尝试覆盖 ParagraphView 中的 RowView 内部类

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

指向内部类 Row extends BoxView

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

public float getAlignment(int axis) 

返回 CENTER (0.5)。如果这无助于重写 layoutMinorAxis(0 以返回正确的偏移量(偏移)。

关于java - 如何使 JTextPane 中的文本和 JComponent 垂直居中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13933402/

相关文章:

java - 通过一次 API 调用即可获取 S3 上对象的大小

java - 如何在不执行任何操作的情况下启动计时器?(java swing计时器)

java - JTextArea 和 JButton。将焦点设置在按钮上

html - 如何减少tr之间的空间?

java - 最快的读写大队列机制

java - Maven 包 org.apache.commons.codec.binary 不存在

java - 如何从数组中选择3个位置,选择后删除每个位置?

Java/Swing : Trying to get BorderLayout to play nice with GridBagLayout

css - TinyMCE 图像对齐

css - 如何水平对齐图像和文本(主页菜单)