Pergunta

Eu estou usando um JEditorPane como um editor de comentários de escrita em meu aplicativo. O tipo de conteúdo está definido "text / plain". Quando estou escrevendo texto nele eo texto preenche o espaço disponível e eu vou em digitação, o texto não está se movendo para cima, para mostrar o cursor. Então, eu não sei onde estou escrevendo eo que eu sou digitação, já que seria visível.

Você poderia me dizer como mostrar sempre o acento circunflexo, movendo o texto acima para cima?

Em vez disso, poderia ser melhor se eu posso auto-redimensionar o editor como eu sou digitação. O JEditorPane está dentro de um JPanel, então eu tenho que redimensionar isso também. alguma idéia?

Foi útil?

Solução

Você precisa colocar o editor dentro de um JScrollPane. O ScrollPane irá adicionar automaticamente as barras de rolagem e remover a necessidade de redimensionar o editor.

Outras dicas

editado para adicionar solução completa

Você tem que adicionar um JScrollPane primeiro. Então, se você não quer que as barras de rolagem para ser visível, mas você quer área de texto para autoscroll, set

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

no painel de rolagem. Isto irá ocultar as barras de rolagem, mas fornecê-lo com deslocamento automático.

Veja como você implementar auto rolagem com painel de rolagem e redimensionamento automático até um determinado máximo.

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

}

Você pode redimensionar Você pode usar este JScrollPane em vez dos JPanel como o recipiente para o editor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top