IP-Adresse mit JFormattedTextField

Status
Nicht offen für weitere Antworten.

waldwichtel

Aktives Mitglied
Hi,

ich hab das Problem dass ich mit einem JFormattedTextField eine IP-Addresse einlesen will. Das geht so weit auch gut. Ich verwede dafür nen MaskFormatter.

Code:
MaskFormatter fmt = null;

try {
    fmt = new MaskFormatter("###.###.###.###");
} catch (java.text.ParseException e) {
    // Exception Handling
}
JFormattedTextField tft1 = new JFormattedTextField(fmt);

Mein Problem ist jetzt aber, wenn ich eine Adresse hab die nicht alle 3 Stellen abdeckt (z.B 192.16.0.1) nimmt mir das Textfeld die Eingabe nicht an. Gibts ne Möglichkeit dem klarzumachen dass es alle Eingaben annehmen soll, wenn in jedem Abschnitt mindestens eine Zahl steht?

Hab schon eine ganze Weile rumgesucht und im Forum gestöbert aber nix wirklich hilfreiches gefunden.
 

dieta

Top Contributor
Mit MaskFormatter get das so weit ich weis nicht. Am einfachsten geht das warscheinlich, indem du dir einen eigenen Formatierer definierst. Da musst du die Klasse DefaultFormatter erweitern und die Methoden
:arrow: String valueToString(Object value) throws ParseException
:arrow: Object stringToValue(String text) throws ParseException
überschreiben.
 

dieta

Top Contributor
Ich hab jetzt mal (hauptsächlich aus Eigeninteresse) einen eigenen Formatierer für IPs geschrieben:
Code:
import javax.swing.text.*;
import java.text.*;

class ipFormatter extends DefaultFormatter
{
	
	public String valueToString(Object value) throws ParseException
	{
		if(!(value instanceof byte[]))
		{
			throw new ParseException("Der übergebene Wert ist kein byte[]!", 0);
		}
		byte[] ip = (byte[]) value;
		if(ip.length != 4)
		{
			throw new ParseException("Die Länge des übergebenen Arrays ist nicht 4!", 0);
		}
		String out = "";
		for(int i=0; i<4; i++)
		{
                        int b = ip[i];
                        if(b < 0) b+= 256;
			out += "." + Integer.toString(b);
		}
		return out.substring(1);
	}
	
	public Object stringToValue(String text) throws ParseException
	{
		byte[] ip = new byte[4];
		String[] s = text.split("\\.");
		if(s.length < 4)
		{
			throw new ParseException("Der übergebene String enthält zu wenige Bytes!", 0);
		}
		if(s.length > 4)
		{
			throw new ParseException("Der übergebene String enthält zu viele Bytes!", 0);
		}
		for(int i=0; i<4; i++)
		{
                        int b = Inetger.parseInt(s[i]);
			ip[i] = (byte)b;
			if(b >255 || b <0)
			{
				throw new ParseException("Das "+Integer.toString(i)+". Byte liegt außerhalb des Bereichhes von 0 bis 255!", 0);
			}
		}
		return ip;
	}
	
}
 

waldwichtel

Aktives Mitglied
So, ich hab mir das Ganze jetzt mal etwas genauer angschaut und hab noch ein paar Fragen.
1) Dass ein Byte von -128 bis 127 geht ist mir soweit klar. Ich hab aber noch ein bischen ein Verständnissproblem mit den Netztwerkbytes. Wie würde z.B die IP 192.168.0.1 als byte[] ausehen?

2) Wie genau muss ich den den Formatter jetzt ins Textfeld einbauen?
 

dieta

Top Contributor
Sorry, mir ist da ein Fehler unterlaufen. Der Code oben ist in zwischen angepasst. Es müsste jetzt funktionieren.

1) Diese IP würde als byte[] so aussehen:
{-64,-88,0,1}
(Überlauf)

2) Das geht so:
Code:
JFormattedTextField t = new JFormattedTextField(new ipFormatter());
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Swing IP Adresse in Jtextfield im Jframe Hauptformulat anzeigen AWT, Swing, JavaFX & SWT 6
F JFormattedTextField für kg und Währung AWT, Swing, JavaFX & SWT 6
S JFormattedTextField dezimal variabler Länge AWT, Swing, JavaFX & SWT 12
Ghostman1711 Java JFormattedTextfield MaskFormatter ohne Leerzeichen AWT, Swing, JavaFX & SWT 3
N Swing JFormattedTextField keine Werte nach Formatzuweisung AWT, Swing, JavaFX & SWT 0
M European Article Number (EAN) in JFormattedTextfield AWT, Swing, JavaFX & SWT 3
L JFormattedTextField AWT, Swing, JavaFX & SWT 3
B Swing JFormattedTextField AWT, Swing, JavaFX & SWT 4
Y JFormattedTextfield - Aktualisierung und Beschränkung AWT, Swing, JavaFX & SWT 4
V Swing Nullpointer Exception bei JFormattedTextField AWT, Swing, JavaFX & SWT 4
S Swing JFormattedTextField - bei nicht korrekter Eingabe Inhalt überschreiben AWT, Swing, JavaFX & SWT 5
S Swing JFormattedTextfield markiert nicht gesamten Inhalt AWT, Swing, JavaFX & SWT 4
C Swing Button in Textfeld (JFormattedTextField) AWT, Swing, JavaFX & SWT 7
A jformattedtextfield unsichtbar und wieder sichtbar machen AWT, Swing, JavaFX & SWT 13
C Swing JFormattedTextField + Eurobetrag AWT, Swing, JavaFX & SWT 2
E Problem mit MaskFormatter und JFormattedTextField AWT, Swing, JavaFX & SWT 3
A EventListener für JFormattedTextField AWT, Swing, JavaFX & SWT 6
B Swing Betrag mit Komma aus jformattedtextfield auslesen. AWT, Swing, JavaFX & SWT 2
E Swing JFormattedTextField Live Validierung AWT, Swing, JavaFX & SWT 4
C Swing Default Werte für JFormattedTextField und Eingaben zurücksetzen AWT, Swing, JavaFX & SWT 5
G JFormattedTextField und DefaultButton AWT, Swing, JavaFX & SWT 6
B Swing JFormattedTextField auf mehreren JPanels in einer JTabbedPane AWT, Swing, JavaFX & SWT 3
G JFormattedTextField values AWT, Swing, JavaFX & SWT 8
R JFormattedTextField AWT, Swing, JavaFX & SWT 8
D Eingabemaske im JFormattedTextField ändern AWT, Swing, JavaFX & SWT 3
D JFormattedTextfield um Grafik erweitern AWT, Swing, JavaFX & SWT 15
N JFormattedTextField erst Verlassen, wenn Eingabe korrekt AWT, Swing, JavaFX & SWT 6
G JFormattedTextField lässt sich nicht mehr leeren AWT, Swing, JavaFX & SWT 4
N PropertyChangeListener an JFormattedTextField AWT, Swing, JavaFX & SWT 7
D Problem mit JFormattedTextField AWT, Swing, JavaFX & SWT 6
A Problem mit JFormattedTextField auslesen AWT, Swing, JavaFX & SWT 11
S JFormattedTextField und maximal 3 Stellen. AWT, Swing, JavaFX & SWT 11
M JFormattedTextField und Null-Werte AWT, Swing, JavaFX & SWT 4
E JformattedTextField, Dialog und weitere Kleinigkeiten . AWT, Swing, JavaFX & SWT 2
E Problem mit Validierende Eingabefeldern JFormattedTextField AWT, Swing, JavaFX & SWT 8
B JFormattedTextField mit DecimalFormat in ein Double AWT, Swing, JavaFX & SWT 11
C JFormattedTextField - nur bestimmte Zeichen zulassen AWT, Swing, JavaFX & SWT 3
H JFormattedTextField - Einen Preis eingeben lassen AWT, Swing, JavaFX & SWT 2
B Zeichen werden im JFormattedTextField überschrieben AWT, Swing, JavaFX & SWT 3
H JFormattedTextField AWT, Swing, JavaFX & SWT 4
F JFormattedTextField formatieren AWT, Swing, JavaFX & SWT 7
J [JFormattedTextField] Nur Zahlen eingebbar AWT, Swing, JavaFX & SWT 3
S [JFormattedTextField] Ja wie denn nun? AWT, Swing, JavaFX & SWT 2
G Datumseingabe mit JFormattedTextField AWT, Swing, JavaFX & SWT 4
B Wert bei JFormattedTextField automatisch aktualisieren AWT, Swing, JavaFX & SWT 2
H Frage zu JFormattedTextField AWT, Swing, JavaFX & SWT 2
G Problem mit JFormattedTextField AWT, Swing, JavaFX & SWT 3
M Datumseingabe in ein JFormattedTextfield AWT, Swing, JavaFX & SWT 2
F Problem mit JFormattedTextField AWT, Swing, JavaFX & SWT 4
A JFormattedTextField - vertical misalignment problems... AWT, Swing, JavaFX & SWT 12

Ähnliche Java Themen


Oben