Question

J'utilise un JEditorPane en tant qu'éditeur pour écrire des commentaires dans mon application. Le type de contenu est défini sur "text / plain". Lorsque j'écris du texte et que le texte remplit l'espace disponible et que je continue à taper, le texte ne se déplace pas vers le haut pour afficher le curseur. Donc, je ne sais pas où je tape et ce que je tape parce que ce serait visible.

Pouvez-vous me dire comment toujours afficher le curseur en déplaçant le texte ci-dessus vers le haut?

Au lieu de cela, cela pourrait être mieux si je peux redimensionner automatiquement l’éditeur lorsque je tape. Le JEditorPane est à l'intérieur d'un JPanel, je dois donc le redimensionner aussi. des idées?

Était-ce utile?

La solution

Vous devez placer l'éditeur dans un JScrollPane. Le volet de défilement ajoute automatiquement des barres de défilement et supprime la nécessité de redimensionner l’éditeur.

Autres conseils

Modifié pour ajouter la solution complète

Vous devez d'abord ajouter un JScrollPane. Ensuite, si vous ne souhaitez pas que les barres de défilement soient visibles, mais que vous souhaitiez que la zone de texte défile automatiquement, définissez

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

sur le panneau de défilement. Cela masquera les barres de défilement, mais vous fournira un défilement automatique.

Voici comment vous pouvez implémenter le défilement automatique avec volet de défilement et le redimensionnement automatique jusqu’à un maximum donné.

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

}

Vous pouvez redimensionner. Vous pouvez utiliser ce JScrollPane au lieu de JPanel comme conteneur de l'éditeur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top