0

JScrollPaneにJTextPaneがあり、JTextPaneの上部に空の「フィラースペース」を追加して、JTextPaneの最初の実際のテキスト行がJViewportの下部に表示されるようにします。JTextPaneの先頭に空の段落があり、JViewportのサイズが変更されるたびにその高さを変更するという漠然とした考えがあります。そのようなことを実装する方法を知っている人はいますか?おそらくもっと簡単な方法がありますか?

4

2 に答える 2

4

JEdi​​torPaneでのカスタム垂直配置の例http://java-sl.com/tip_center_vertically.htmlを使用できます。下の位置を垂直に配置するには、最後の線をoffset =(targetSpan --textBlockHeight);に変更する必要があります。

于 2012-09-25T10:06:43.723 に答える
3

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();
            }
        });
    }
}

結果は次のとおりです。

ここに画像の説明を入力してください

于 2012-09-25T02:12:11.150 に答える