【问题标题】:JTextPane and empty filler spaceJTextPane 和空填充空间
【发布时间】:2012-09-25 01:21:18
【问题描述】:

我在 JScrollPane 中有一个 JTextPane,我想在 JTextPane 的顶部添加一个空的“填充空间”,以便 JTextPane 中的第一个实际文本行出现在 JViewport 的底部。我有一个模糊的想法,即在 JTextPane 的开头可能有一个空段落,并在每次调整 JViewport 大小时修改它的高度。任何人有想法如何实现这样的事情?也许有更简单的方法?

【问题讨论】:

  • 我使用 JTextPane 作为聊天组件,很多聊天客户端都有这种行为。
  • 感谢您的解释 - 我自己不是喋喋不休:-)

标签: java swing border jtextpane margins


【解决方案1】:

您可以在 JEditorPane 中使用自定义垂直对齐的示例http://java-sl.com/tip_center_vertically.html。要垂直提供底部对齐,您应该将最后的行更改为 offset = (targetSpan - textBlockHeight);

【讨论】:

    【解决方案2】:

    您可以使用setMargin() 设置组件边框与其文本之间的边距。例如:

    textPane.setMargin(new Insets(20, 0, 0, 0));
    

    编辑:

    考虑下面这个非常简单的例子来演示setMargin()的用法:

    import java.awt.Dimension;
    import java.awt.EventQueue;
    import java.awt.FontMetrics;
    import java.awt.Insets;
    
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTextPane;
    
    public class MarginDemo {
        private static void createAndShowUI() {
            final JTextPane textPane = new JTextPane();
            final JScrollPane scrollPane = new JScrollPane(textPane);
    
            String text = "Lorem ipsum dolor sit amet, "
                    + "consectetur adipiscing elit."
                    + "Fusce nec sapien id diam consequat adipiscing.";
            textPane.setText(text);
    
            JFrame frame = new JFrame("MarginDemo");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.getContentPane().add(scrollPane);
    
            frame.setSize(new Dimension(200, 200));
            frame.setVisible(true);
    
            EventQueue.invokeLater(new Runnable() {
                public void run() {
                    FontMetrics metrics = textPane.getFontMetrics(textPane
                            .getFont());
                    textPane.setMargin(new Insets(scrollPane.getViewport()
                            .getHeight() - metrics.getHeight(), 0, 0, 0));
                }
            });
        }
    
        public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable() {
                public void run() {
                    createAndShowUI();
                }
            });
        }
    }
    

    结果如下:

    【讨论】:

    • 完美!正是我所追求的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多