%Teilweise Erzeugt mit dem LaTeX-Generator: http://latex.sehnot.de
%Schriftgröße, Layout, Papierformat, Art des Dokumentes
\documentclass[10pt,oneside,a4paper]{scrartcl}
%Einstellungen der Seitenränder
\usepackage[left=2cm,right=2cm,top=1.5cm,bottom=1.5cm,includeheadfoot]{geometry}
%neue Rechtschreibung
\usepackage[ngerman]{babel}
%Umlaute ermöglichen
\usepackage[utf8]{inputenc}
%Gesamtseitenzahl
\usepackage{lastpage}
% Kopf- und Fußzeile
\usepackage[automark]{scrpage2}
%Quellcode-Listings
\usepackage{listings}
%Hyperlinks
\usepackage{hyperref}
%Kopfzeile
\ihead{Java}
\chead{}
\ohead{http://kohnlehome.de/java/regextextfield.pdf}
\setheadsepline{0.5pt}
%Fußzeile
\setfootsepline{0.5pt}
\ifoot{Franz Kohnle}
\cfoot{Seite \thepage\ von \pageref{LastPage}}
\ofoot{\today}
%Bilder
\usepackage{graphicx}
\usepackage{graphics}
\pagestyle{scrheadings}
%\pdfpagewidth=\paperwidth
%\pdfpageheight=\paperheight
\begin{document}
% Überschrift
\begin{center}
\LARGE % Schriftgröße
\bfseries % Fettdruck
\sffamily % Serifenlose Schrift
JavaFX 8 - RegexTextField
\end{center}
\section*{Funktionsweise}
Das \textbf{RegexTextField} überprüft bei Änderungen seines Inhalts über die GUI, ob der Text zu einem Regulären Ausdruck passt. Falls der Text nicht passt, wird der alte Inhalt wiederhergestellt.\\
Änderungen über Aufruf der setText()-Methode werden nicht überprüft.
\section*{beispiel.fxml}
Da der JavaFX Scene Builder die Klasse \textbf{RegexTextField} nicht kennt, müssen die Elemente im Texteditor bearbeitet werden.
\begin{verbatim}
\end{verbatim}
\section*{RegexTextField.java}
\begin{verbatim}
package regextextfieldtester;
import javafx.scene.control.TextField;
public class RegexTextField extends TextField {
//-------------------------------------------------------
// Das Attribut "regex" speichert den Regulären Ausdruck,
// mit dem der Inhalt des TextField überprüft wird
//-------------------------------------------------------
private String regex;
public RegexTextField() {
this.regex = ".*";
}
public String getRegex() {
return regex;
}
public void setRegex(String regex) {
this.regex = regex;
}
//----------------------------------------------------------------
// Bei Änderung des Inhalts des TextField über GUI wird überprüft
// ACHTUNG: Bei Aufruf der setText()-Methode wird NICHT überprüft!
//----------------------------------------------------------------
@Override
public void replaceText(int start, int end, String text) {
// alten Text und Cursorposition merken
String alterText = this.getText();
int alteCursorPosition = this.getCaretPosition();
// neuen Text zuweisen
super.replaceText(start, end, text);
// überprüfen und evtl. zurücksetzen
ueberpruefen(alterText, alteCursorPosition);
}
@Override
public void replaceSelection(String replacement) {
// alten Text und Cursorposition merken
String alterText = this.getText();
int alteCursorPosition = this.getCaretPosition();
// neuen Text zuweisen
super.replaceSelection(replacement);
// überprüfen und evtl. zurücksetzen
ueberpruefen(alterText, alteCursorPosition);
}
private void ueberpruefen(String alterText, int alteCursorPosition) {
String neuerText = this.getText();
if (!neuerText.matches(regex)) {
// alten Text und alte Cursorpoition wiederherstellen
this.setText(alterText);
this.positionCaret(alteCursorPosition);
}
}
}
\end{verbatim}
\end{document}