Domanda

Sto usando JEditorPane come editor per scrivere commenti nella mia applicazione. Il tipo di contenuto è impostato " text / plain " ;. Quando sto scrivendo del testo in esso e il testo riempie lo spazio disponibile e continuo a digitare, il testo non si sposta verso l'alto per mostrare il cursore. Quindi non so dove sto scrivendo e cosa sto scrivendo poiché sarebbe visibile.

Potresti dirmi come mostrare sempre il cursore spostando il testo sopra verso l'alto?

Invece, potrebbe essere meglio se posso ridimensionare automaticamente l'editor mentre sto scrivendo. JEditorPane si trova all'interno di JPanel, quindi devo ridimensionarlo anche io. qualche idea?

È stato utile?

Soluzione

Devi inserire l'editor in un JScrollPane. ScrollPane aggiungerà automaticamente le barre di scorrimento e rimuoverà la necessità di ridimensionare l'editor.

Altri suggerimenti

Modificato per aggiungere la soluzione completa

Devi prima aggiungere un JScrollPane. Quindi, se non si desidera che le barre di scorrimento siano visibili, ma si desidera scorrere automaticamente l'area di testo, impostare

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

sul riquadro di scorrimento. Ciò nasconderà le barre di scorrimento, ma ti fornirà la scansione automatica.

Ecco come implementare lo scorrimento automatico con il riquadro di scorrimento e il ridimensionamento automatico fino a un dato massimo.

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

}

È possibile ridimensionare È possibile utilizzare questo JScrollPane invece di JPanel come contenitore per l'editor.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top