2008-11-07 2 views
0

Я использую JEditorPane в качестве редактора для написания комментариев в своем приложении. Тип контента установлен «text/plain». Когда я пишу текст в нем, и текст заполняет доступное пространство, и я продолжаю набирать текст, текст не перемещается вверх, чтобы показывать курсор. Поэтому я не знаю, где я печатаю и что я печатаю, так как это будет видно.auto scolling JEditorPane

Не могли бы вы рассказать мне, как всегда показывать каретку, перемещая вышеуказанный текст вверх?

Вместо этого было бы лучше, если бы я мог автоматически изменять размер редактора при вводе текста. JEditorPane находится внутри JPanel, поэтому мне тоже нужно изменить размер. есть идеи?

+0

Вы используете панель прокрутки? – 2008-11-07 12:31:41

+0

no я не могу использовать сколпаун. по крайней мере, я не могу показать полосы прокрутки ... :( – 2008-11-08 08:00:19

ответ

4

Вам нужно разместить редактор внутри JScrollPane. ScrollPane автоматически добавит полосы прокрутки и удалит необходимость изменения размера редактора.

+0

Нет, я не могу использовать scollpane. По крайней мере, я не могу показать полосы прокрутки ... :( – 2008-11-08 08:00:59

1

Edited добавить полное решение

Вы должны добавить JScrollPane первый. Затем, если вы не хотите, чтобы скроллбары быть видимыми, но вы хотите, текстовая область для автопрокрутки, установите

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

на ScrollPane. Это скроет полосы прокрутки, но предоставит вам автопрокрутку.

Вот как можно реализовать автоматическую прокрутку с помощью панели прокрутки и автоматическое изменение размера до заданного максимума.

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

} 

Вы можете изменить размер Вы можете использовать этот JScrollPane вместо JPanel в качестве контейнера для редактора.