0

アプリケーションにコメントを書き込むためのエディタとして JEditorPane を使用しています。コンテンツタイプは「テキスト/プレーン」に設定されています。テキストを書き込んでいて、テキストが使用可能なスペースを埋めて入力を続けると、テキストが上に移動してカーソルが表示されません。そのため、表示されるため、どこに入力しているのか、何を入力しているのかわかりません。

上のテキストを上に移動してキャレットを常に表示する方法を教えてください。

代わりに、入力中にエディターのサイズを自動変更できればもっと良いかもしれません。JEdi​​torPane は JPanel 内にあるため、これもサイズ変更する必要があります。何か案は?

4

2 に答える 2

4

エディターを JScrollPane 内に配置する必要があります。ScrollPane は自動的にスクロールバーを追加し、エディターのサイズを変更する必要をなくします。

于 2008-11-07T14:14:26.567 に答える
1

完全なソリューションを追加するために編集

最初に JScrollPane を追加する必要があります。次に、スクロールバーを表示したくないが、テキスト領域を自動スクロールしたい場合は、設定します

scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);

スクロールペインで。これにより、スクロールバーが非表示になりますが、自動スクロールが提供されます。

スクロール ペインを使用した自動スクロールと、指定された最大値までの自動サイズ変更を実装する方法を次に示します。

import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;


public class SPTest extends JFrame {

    private static final long serialVersionUID = 1L;

    private JEditorPane editor;
    private JScrollPane scrollPane;
    private JPanel topPanel;
    private JLabel labelTop;

    public SPTest() {
        super("Editor test");
        initComponents();
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
    }

    private void initComponents() {
        editor = new JEditorPane("text/plain", null);
        scrollPane = new JScrollPane(editor);
        topPanel = new JPanel();
        labelTop = new JLabel("main contents here");
        topPanel.add(labelTop);

        setSize(600, 400);
        editor.setMinimumSize(new Dimension(100, 30));
        editor.setPreferredSize(new Dimension(100, 60));
        scrollPane.setPreferredSize(new Dimension(600, 60));
        scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
        scrollPane.setMinimumSize(new Dimension(100, 30));

        final int MAX_HEIGHT_RSZ = 120;
        editor.addCaretListener(new CaretListener() {

            public void caretUpdate(CaretEvent e) {
                int height = Math.min(editor.getPreferredSize().height, MAX_HEIGHT_RSZ);
                Dimension preferredSize = scrollPane.getPreferredSize();
                preferredSize.height = height;
                scrollPane.setPreferredSize(preferredSize);
                SPTest.this.validate();
            }
        });

        setLayout(new BorderLayout());
        add(topPanel, BorderLayout.NORTH);
        add(scrollPane, BorderLayout.SOUTH);
    }

    public static void main(String[] args) {
        new SPTest();
    }

}

サイズを変更できます。エディターのコンテナーとして、JPanel の代わりにこの JScrollPane を使用できます。

于 2011-04-29T21:36:38.010 に答える