Pregunta

Estoy usando un JEditorPane como editor para escribir comentarios en mi aplicación. El tipo de contenido se establece "text / plain". Cuando escribo texto en él y el texto llena el espacio disponible y sigo escribiendo, el texto no se mueve hacia arriba para mostrar el cursor. Así que no sé dónde estoy escribiendo y qué estoy escribiendo ya que sería visible.

¿Podría decirme cómo mostrar siempre el cursor moviendo el texto anterior hacia arriba?

En cambio, podría ser mejor si puedo cambiar automáticamente el tamaño del editor mientras escribo. El JEditorPane está dentro de un JPanel, así que también tengo que cambiar el tamaño. alguna idea?

¿Fue útil?

Solución

Debe colocar el editor dentro de un JScrollPane. ScrollPane agregará automáticamente barras de desplazamiento y eliminará la necesidad de cambiar el tamaño del editor.

Otros consejos

Editado para agregar una solución completa

Primero debe agregar un JScrollPane. Luego, si no desea que las barras de desplazamiento sean visibles, pero desea que el área de texto se desplace automáticamente, configure

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

en el panel de desplazamiento. Esto ocultará las barras de desplazamiento, pero le proporcionará desplazamiento automático.

Así es como implementaría el desplazamiento automático con el panel de desplazamiento y el cambio de tamaño automático hasta un máximo determinado.

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

}

Puede cambiar el tamaño Puede usar este JScrollPane en lugar del JPanel como contenedor del editor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top