14.8 Textkomponenten
Swing bietet eine Reihe von Textkomponenten:
- JTextField: einzeiliges Textfeld
- JFormattedTextField: einzeiliges Textfeld mit Formatierungsvorgaben
- JPasswordField: einzeilige Eingabe mit verdeckten Zeichen
- JTextArea: mehrzeiliges Textfeld
- JEditorPane: Editor-Komponente
- JTextPane: Spezialisierung der Editor-Komponente
Die JEditorPane ist die leistungsfähigste Komponente, die über sogenannte Editor-Kits reinen Text, HTML oder RTF darstellen und verwalten kann.
Hinweis |
Swings Textkomponenten sind sehr leistungsfähig und allemal beeindruckend, da Swing ja allerlei Dinge von Hand erledigt, weil es nicht auf die nativen Textkomponenten vom grafischen Teil des Betriebssystems zurückgreift. Der aufwändigste Teil ist die korrekte Darstellung des Textes (die Java 2D übernimmt), aber Selektion, effektive Verwaltung von großen Textmengen, schnelles Scrolling, Tastaturkommandos, einfache Programmier-API sind weitere Anforderungen. |
Viele wichtige Methoden sind in der Oberklasse javax.swing.text.JTextComponent zu finden. Zwar liegt diese Klasse im Paket javax.swing.text, doch liegen alle anderen Klassen »klassischerweise« unter javax.swing.
Abbildung 14.27: Vererbungsbeziehung der Swing-Textkomponenten
14.8.1 Text in einer Eingabezeile
Einzeilige Textfelder werden mit der Klasse JTextField erstellt. Unterschiedliche Konstruktoren legen einen Start-String oder die Anzahl der Zeichen fest, die ein Textfeld anzeigen kann. Ein JTextField löst mit der -Taste ein ActionEvent auf diesen Ereignistyp aus – das kennen wir schon von JButton.
Ein kleiner Rechner soll über eine Textzeile mit einer Länge von 20 Zeichen verfügen. Bei Aktivierung der -Taste soll der Ausdruck berechnet werden und in der Textzeile erscheinen:
Listing 14.14: com/tutego/insel/ui/text/JTextFieldDemo.java, main()
JFrame frame = new JFrame();
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
final JTextField input = new JTextField( "12 * 3 + 2", 20 );
input.addActionListener( new ActionListener() {
@Override public void actionPerformed( ActionEvent e ) {
try {
input.setText( "" +
new ScriptEngineManager().getEngineByName("JavaScript")
.eval(input.getText()) );
}
catch ( ScriptException ex ) {
ex.printStackTrace();
}
}
} );
frame.add( input );
frame.pack();
frame.setVisible( true );
class javax.swing.JTextField |
- JTextField()
Erzeugt ein leeres Textfeld. - JTextField(int columns)
Erzeugt ein Textfeld mit einer gegebenen Anzahl von Spalten. - JTextField(String text)
Erzeugt ein mit text initialisiertes Textfeld. - JTextField(String text, int columns)
Erzeugt ein mit text initialisiertes Textfeld mit columns Spalten.
14.8.2 Die Oberklasse der Text-Komponenten (JTextComponent)
Alle Texteingabefelder unter Swing sind von der abstrakten Oberklasse JTextComponent abgeleitet. Die wichtigsten Methoden sind setText(String) und getText(), mit denen sich Zeichenketten setzen und erfragen lassen.
class javax.swing.text.JTextComponent |
- String getText()
Liefert den Inhalt des Textfelds. - String getText(int offs, int len)
Liefert den Inhalt des Textfelds von offs bis offs + len. Stimmen die Bereiche nicht, wird eine BadLocationException ausgelöst. - String getSelectedText()
Liefert den selektierten Text. Keine Selektion ergibt die Rückgabe null. - void setText(String t)
Setzt den Text neu. - void read(Reader in, Object desc) throws IOException
Liest den Inhalt aus dem Reader in das Textfeld. desc beschreibt den Datenstrom näher, kann aber null sein. Die read()-Methode erzeugt intern ein neues Document-Objekt und verwirft das alte. - void write(Writer out) throws IOException
Schreibt den Inhalt des Textfelds in den Writer.
Ihr Kommentar
Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.