Advanced
Java
Services
|
LineWrapping bei JTextArea |
|
JTextArea selbst ist nicht scrollfähig, sondern muß in eine JScrollPane eingebettet werden,
was am Einfachsten im Konstruktor von JScrollPane geschieht (siehe Beispiel unten).
Bei einer JTextArea ist das Schalten des Zeilenumbruchs kein Problem, weil es eigene Methoden
dafür gibt. Die Defaulteinstelleung für eine JTextArea ist kein Zeilenumbruch, also wird
waagrechtes Scrollen unterstützt. Mit der Methode
- void setLineWrap(boolean wrap)
kann man den Zeilenumbruch einschalten bzw. wieder ausschalten. Ergänzt wird diese Methode durch
die Methode
- void setWrapStyleWord(boolean word)
mit der man das Verhalten eines eingeschalteten Zeilenumbruchs beeinflußen kann. Wird hier true
übergeben, so werden die Zeilen bei Leerzeichen (whitespace) umgebrochen, was natürlich die
Lesbarkeit des Textes verbessert.
Das folgende Beispiel demonstriert dieses Feature von JTextArea. In einer JMenuBar wird eine JCheckBox
angelegt, mit der ein Benutzer den Zeilenumbruch schalten kann. Die Ereignisbehandlung wird in einer
anonymen Klasse erledigt. Um den Konstruktor übersichtlicher zu halten, werden aus dem Konstruktor
private Initialisierungsmethoden aufgerufen.
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class LineWrapping1 extends JFrame
{
private JTextArea tear ;
private Container conPane;
private JScrollPane sp;
private JMenuBar mb ;
// --------------------------- Konstruktor -------------------------\\
public LineWrapping1()
{
conPane = getContentPane();
initMenuBar();
initCenter() ;
initFrame() ;
}
// --------------------------- initMenuBar -------------------------\\
private void initMenuBar()
{
mb = new JMenuBar();
JCheckBox cb = new JCheckBox("linewrap");
cb.addItemListener( new ItemListener()
{
public void itemStateChanged(ItemEvent e)
{
// selected = linewrapping = true
if (e.getStateChange() == ItemEvent.SELECTED )
tear.setLineWrap(true) ;
else
tear.setLineWrap(false) ;
}
}
);
mb.add(cb);
setJMenuBar(mb);
}
// ---------------------------- initCenter --------------------------\\
private void initCenter()
{
tear = new JTextArea();
sp = new JScrollPane(tear);
conPane.add(sp);
}
// ------------------------------ initFrame -------------------------\\
private void initFrame()
{
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) ;
this.setTitle(" LineWrapping1");
this.setSize(300,250);
this.setLocation(200,100);
this.setVisible(true);
}
// ------------------------------- main --------------------------\\
public static void main(String args[])
{
LineWrapping1 wnd = new LineWrapping1() ;
}
} // end class