2012-11-18 1 views
1

Метод переноса слов, предоставляемый для JTextArea, не работает в моей программе. Почему он не работает? Как я могу это исправить? Вот код:Word Wrapping не работает в JTextArea

text= new JTextArea(15,65); 

    text.setWrapStyleWord(true); // word wrapping enabled 

    text.setPreferredSize(new Dimension(getPreferredSize())); 

Вот скриншот. Последнее слово выходит за рамки. enter image description here

+5

Там еще немного, вы не говорили нам: вы звоните 'setLineWrap (истина)' на вашем JTextArea? Я не вижу, чтобы это было опубликовано где угодно. Вы разместили свой JTextArea внутри JScrollPane? Правильно ли вы используете менеджеры компоновки и избегаете использования нулевого макета и абсолютного позиционирования? –

+0

Я бы даже пошел дальше HFOE, размещение трех строк кода не является доказательством проблемы или решения. Только [SSCCE] (http://sscce.org) действительно поможет вам или поможет найти решение для вас. Первое, что вам нужно сделать, это отказаться от этого вызова: 'text.setPreferredSize (новый размер (getPreferredSize());'. Это просто ищет проблемы ... (и, кстати, вызов конструктора копирования Dimension абсолютно не нужен) –

+2

спасибо Hovercraft Full OF Eels Я не использовал метод setLineWrap(). Он решил мою проблему – Alfred

ответ

5

Следующий SSCCE позволяет экспериментировать с обоими настройками. Здесь вы можете видеть, что использование setWrapStyleWord не имеет эффекта, если вы не вызываете setLineWrap. Это также описано в javadoc от setWrapStyleWord.

Лучшие результаты для читаемой формы устанавливают оба значения в true.

enter image description here

import javax.swing.JCheckBox; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 
import javax.swing.WindowConstants; 
import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import java.awt.event.ItemEvent; 
import java.awt.event.ItemListener; 

public class TextAreaDemo { 

    public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
     JFrame testFrame = new JFrame("TestFrame"); 

     final JTextArea textArea = new JTextArea(15, 65); 
     testFrame.add(new JScrollPane(textArea)); 

     final JCheckBox wordWrap = new JCheckBox("word wrap"); 
     wordWrap.setSelected(textArea.getWrapStyleWord()); 
     wordWrap.addItemListener(new ItemListener() { 
      @Override 
      public void itemStateChanged(ItemEvent e) { 
      textArea.setWrapStyleWord(wordWrap.isSelected()); 
      } 
     }); 
     testFrame.add(wordWrap, BorderLayout.NORTH); 
     final JCheckBox lineWrap = new JCheckBox("line wrap"); 
     lineWrap.setSelected(textArea.getLineWrap()); 
     lineWrap.addItemListener(new ItemListener() { 
      @Override 
      public void itemStateChanged(ItemEvent e) { 
      textArea.setLineWrap(lineWrap.isSelected()); 
      } 
     }); 
     testFrame.add(lineWrap, BorderLayout.SOUTH); 

     testFrame.pack(); 
     testFrame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 
     testFrame.setVisible(true); 
     } 
    }); 

    } 
} 
+0

как вы используете SSCCE? – Alfred

+0

повторите то же описание, что и ваш MadProg ... – mKorbel

+0

@Alfred shot, runnable, компилируемое, примерно идея desciber :-) – mKorbel