Frage

Ich bin mit einem JEditorPane als Redakteur Kommentare in meiner Anwendung zu schreiben. Der Inhaltstyp „text / plain“ gesetzt. Wenn ich Text in ihm schreibe, und der Text füllt den verfügbaren Raum und ich gehe auf die Eingabe, wird der Text bewegt sich nicht nach oben um den Cursor zu zeigen. Also ich weiß nicht, wo ich bin eingeben und was ich eingeben, da es sichtbar wäre.

Könnten Sie mir sagen, wie immer die Einfügemarke zeigen, indem sie den obigen Text nach oben bewegt?

Stattdessen könnte es besser sein, wenn ich die Editor Auto-Größe ändern kann, wie ich tippe. Die JEditorPane ist in einem JPanel, so habe ich das auch zu ändern. Irgendwelche Ideen?

War es hilfreich?

Lösung

Sie müssen den Editor in einem JScrollPane setzen. Die ScrollPane wird automatisch Bildlaufleisten hinzufügen und die Notwendigkeit, entfernen Sie den Editor zu ändern.

Andere Tipps

Edited volle Lösung hinzuzufügen

Sie haben einen JScrollPane erste hinzuzufügen. Dann, wenn Sie nicht wollen, die Bildlaufleisten sichtbar sein, aber Sie wollen, dass der Textbereich Autoscroll, setzen

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

auf dem scrollpane. Dadurch werden die Bildlaufleisten verstecken, sondern bieten Ihnen Autoscrolling.

Hier ist, wie Sie die automatischen Scrollen mit Bildlauffenster implementieren würden, und die automatische Größenanpassung bis zu einem bestimmten Maximum.

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

}

Sie konnten die Größe Sie diesen JScrollPane als Container für den Editor anstelle des JPanel verwenden können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top