Key Listener macht nicht das was er soll

Status
Nicht offen für weitere Antworten.

hawkeye78

Bekanntes Mitglied
Hallo,

ich versuche mich gerade daran eine Eingabemaske zu erstellen in der ich später eine Mac-Addresse von einer Netzwerkkarte eingeben kann. Ich hatte mich dabei bis jetzt versucht nach dieser Seite zu richten und habe bis jetzt folgenden Quellcode verbrochen:

Code:
	public class Oberflaeche
	extends JFrame
	implements KeyListener
	{
		// Definition der Textfelder
		private JTextField tfMac=new JTextField(17);
		
		// Definition der Labels
		private JLabel lMac=new JLabel("MAC-Adresse");
		
		// Definition des Buttons
		private JButton send=new JButton("senden");
				
		public Oberflaeche()
		{
			super("Test");
	
			JPanel panel = new JPanel();	
			panel.setLayout(new GridLayout(6, 1));
			
			tfMac.addKeyListener(this);		
			
			panel.add(lMac);
			panel.add(tfMac);
			panel.add(lIP);

			panel.add(send);
			
			getContentPane().add(panel,"Center");
		}
		
	    public void keyPressed(KeyEvent e)
	    {
	        Object o = e.getSource();
	
	        if(o instanceof TextField)
	        {
	            JTextField tf = (JTextField)o;
	
	            if(tf == tfMac)
	            {
	                int keycode = e.getKeyCode();
	            
	                if(tf.getText().length() >= 3)
	                {
	                    switch (keycode)
	                    {
	                        case KeyEvent.VK_ENTER:
	                        case KeyEvent.VK_BACK_SPACE:
	                        case KeyEvent.VK_DELETE:
	                        case KeyEvent.VK_LEFT:
	                        case KeyEvent.VK_RIGHT:
	                            return;
	                        default:
	                            break;
	                    }
	
	                    e.consume();
	                }
	                else
	                {
	                    switch (keycode)
	                    {
	                        case KeyEvent.VK_ENTER:
	                        case KeyEvent.VK_BACK_SPACE:
	                        case KeyEvent.VK_DELETE:
	                        case KeyEvent.VK_LEFT:
	                        case KeyEvent.VK_RIGHT:
	                        case KeyEvent.VK_0:
	                        case KeyEvent.VK_1:
	                        case KeyEvent.VK_2:
	                        case KeyEvent.VK_3:
	                        case KeyEvent.VK_4:
	                        case KeyEvent.VK_5:
	                        case KeyEvent.VK_6:
	                        case KeyEvent.VK_7:
	                        case KeyEvent.VK_8:
	                        case KeyEvent.VK_9:
	                            return;
	                        default:
	                            break;
	                    }
	
	                    e.consume();
	                }
	            }
	        }
	    }
	
	    public void keyReleased(KeyEvent e)
	    {}    
	public void keyTyped(KeyEvent e) {}

Allerdings weigert sich das Programm bis jetzt die entsprechende Eingabe länge zu begrenzen bzw. einige Zeichen von der Eingabe auszuschließen. Da ich im moment leider ziemlich ratlos bin woran es noch liegen könnte wäre ich über einen entsprechenden Hinweis auf jeden Fall sehr dankbar.
Viele Grüsse
Dan
 

foobar

Top Contributor
Ich würde das über ein eigenes Document regeln, indem du dort die insertString-methode überschreibst. Benutz mal die Suche, dazu gibt es schon einige Beiträge.
 

hawkeye78

Bekanntes Mitglied
Hallo foobar,

ich dachte schon eigentlich daran das so zu lösen wie es da jetzt steht :) (und ja ich weiß ich kann recht sturr sein), aber dafür habe ich nun auch schon mal heraus gefunden woran es liegt die Methode "consume()" scheint nur in der Kombination mit AWT-Elementen zu funktionieren, da ich aber versuche Swing zu verwenden kommt er offenbar damit nicht klar.
Allerdings ist nun noch die Frage wie ich dieses Problem löse
Viele Grüsse
Dan
 

Wildcard

Top Contributor
AFAIK bekommt das JTextField den KeyEvent zuerst, also ist es nutzlos das Event zu konsumieren.
Du könntest im Listener einen neuen Text auf das Textfeld setzen, aber der saubere Weg ist über das Document
 

hawkeye78

Bekanntes Mitglied
Hallo Wildcard,

ich habe gerade heraus gefunden das ich offenbar nur den falschen EventListener verwendet habe und darum das "consume()" nicht funktioniert hat, nachdem ich den Quellcode ein bißchen umgestrickt habe schaut das jetzt so aus:
Code:
	import javax.swing.*;
	import java.awt.*;
	import java.awt.event.*;
	
	public class Oberflaeche
	extends JFrame
	{
		// Definition der Textfelder
		private JTextField tfMac=new JTextField(17);
		
		// Definition der Labels
		private JLabel lMac=new JLabel("MAC-Adresse");
		
		// Definition des Buttons
		private JButton send=new JButton("senden");
				
		public Oberflaeche()
		{
			super("Test");
	
			JPanel panel = new JPanel();	
			panel.setLayout(new GridLayout(6, 1));
	        
			
	        addWindowListener(new WindowAdapter()
	        {
	            public void windowClosing(WindowEvent e)
	            {
	            //    quit();
	            }
	        });
			
			panel.add(lMac);
			panel.add(tfMac);
			panel.add(send);
			
			getContentPane().add(panel,"Center");
			
			// Überprüfen auf den Buttons zum Senden
			send.addActionListener(new ActionListener()
			{
				public void actionPerformed(ActionEvent e)
				{
					System.out.println(tfMac.getText());
				}
			});
			
			// Keylistener für die korrekte Eingabe
		      tfMac.addKeyListener(new KeyAdapter()
		      {
		          public void keyTyped(KeyEvent e)
		          {
		            //System.out.println("keyevent: "+e.getKeyCode());
		        	  if(tfMac.getText().length()<17)
		        	  {
		        		  switch(e.getKeyChar())
		        		  {
		        		  	case '1':
		        		  	case '2':
		        		  	case '3':
		        		  	case '4':
		        		  	case '5':
		        			case '6':
		        		  	case '7':
		        		  	case '8':
		        		  	case '9':
		        		  	case '0':
		        			case 'A':
		        		  	case 'B':
		        		  	case 'C':
		        		  	case 'D':
		        		  	case 'E':
		        		  	case 'F':
		        			case 'a':
		        		  	case 'b':
		        		  	case 'c':
		        		  	case 'd':
		        		  	case 'e':
		        		  	case 'f':
		        		  	case '-':
		        		  		break;
		        		  	default: e.consume();
		        		  }
		        	  }
		        	  else
		        	  {
		        		  e.consume();
		        	  }
		        	
		          }
		      });

		}
	}

und das funktioniert glücklicherweise :)
Noch einmal vielen Dank für die Hilfe
Viele Grüsse
Dan
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Variable durch Action Listener ändern Java Basics - Anfänger-Themen 2
D String value change listener Java Basics - Anfänger-Themen 2
topi WindowAdapter / Listener / Event Java Basics - Anfänger-Themen 4
L Problem mit Listener Java Basics - Anfänger-Themen 0
P Listener registrieren Java Basics - Anfänger-Themen 40
Salo JTabel Selection listener Bsp. Java Basics - Anfänger-Themen 3
W JLabel, Farbe durch Listener ändern Java Basics - Anfänger-Themen 6
M Listener für Button - Wert von Variablen verändern Java Basics - Anfänger-Themen 14
V JTable welcher Listener ? Java Basics - Anfänger-Themen 7
J Verständnis Problem Java-Listener. Java Basics - Anfänger-Themen 59
M Compiler-Fehler Using action listener Java Basics - Anfänger-Themen 1
F Listener schreiben Java Basics - Anfänger-Themen 1
P Eigene Knöpfe mit eigenem Listener Java Basics - Anfänger-Themen 5
B Listener beim Laden (deserialize) wieder hinzufügen bzw. mitspeichern? Java Basics - Anfänger-Themen 3
J Listener Java Basics - Anfänger-Themen 4
kaoZ Best Practice Verständnisfrage Listener bei lokalen Objekten Java Basics - Anfänger-Themen 8
F eigenes Listener Pattern mit Interface Java Basics - Anfänger-Themen 1
llabusch Kombinationsfeld - LISTENER Java Basics - Anfänger-Themen 0
S Eigenen Listener zu eigenen Button! Java Basics - Anfänger-Themen 5
S Listener reagieren nicht mehr Java Basics - Anfänger-Themen 3
O Laufender Timer+Action Listener in Thread VS isAlive() Java Basics - Anfänger-Themen 4
E Mein eigener Listener (Hilfe gesucht) Java Basics - Anfänger-Themen 2
K On Click listener Problem Java Basics - Anfänger-Themen 4
L JTextField/Listener Input Problem Java Basics - Anfänger-Themen 2
M Listener einerm JPanel hinzufuegen Java Basics - Anfänger-Themen 3
G Listener ohne Objekt Java Basics - Anfänger-Themen 5
T Button Text mit Action Listener [Hilfe!] Java Basics - Anfänger-Themen 10
H Eigenen Listener einbauen Java Basics - Anfänger-Themen 5
K Key Listener bei 2 gleichzeitig gedrückten tasten Java Basics - Anfänger-Themen 3
M Bäume und Listener Java Basics - Anfänger-Themen 2
K Erste Schritte table Listener noob frage Java Basics - Anfänger-Themen 3
E eigenständige Listener-Klasse Java Basics - Anfänger-Themen 9
T Motion listener Java Basics - Anfänger-Themen 10
U Listener erstellen Java Basics - Anfänger-Themen 16
N Variablen aus Action Listener lesen und weiterverarbeiten Java Basics - Anfänger-Themen 12
M listener Java Basics - Anfänger-Themen 16
L Listener Problem in Klasse Java Basics - Anfänger-Themen 8
P Listener für mehrere Buttons Java Basics - Anfänger-Themen 3
L Window Listener Java Basics - Anfänger-Themen 2
Kenan89 JTable: Listener Java Basics - Anfänger-Themen 4
N Klassen auf den Action Listener in einer andere Klasse zugreifen Java Basics - Anfänger-Themen 6
A action listener Java Basics - Anfänger-Themen 8
M Netbeans Listener - Anonymous, inner class, main class? Java Basics - Anfänger-Themen 4
K Action Listener reagiert nicht auf Button druck mehr??? Java Basics - Anfänger-Themen 4
E Mehrere Listener auf einen Button? Java Basics - Anfänger-Themen 3
P Input/Output InputStream Listener? Java Basics - Anfänger-Themen 7
X Problem bezüglich Key Listener Java Basics - Anfänger-Themen 3
Y Button hört nicht auf Listener Java Basics - Anfänger-Themen 5
H JTable, Listener und CellEditor Java Basics - Anfänger-Themen 8
H Listener und Events entfernen Java Basics - Anfänger-Themen 2
B OOP Eigener Event-Listener erstellen Java Basics - Anfänger-Themen 4
M Listener Objekte Java Basics - Anfänger-Themen 12
S Applet Key Listener Java Basics - Anfänger-Themen 6
J Action Listener Java Basics - Anfänger-Themen 2
G Probleme mit Listener Java Basics - Anfänger-Themen 27
B Wert einer Variable mit Listener ueberwachen Java Basics - Anfänger-Themen 3
F Port Listener Java Basics - Anfänger-Themen 9
J JComboBox Listener Java Basics - Anfänger-Themen 6
J Window-Listener funktionieren nicht Java Basics - Anfänger-Themen 7
N Frage zu Listener für Textfelder Java Basics - Anfänger-Themen 5
Benji0815 Eigenen Listener schreiben Java Basics - Anfänger-Themen 13
M Probleme beim Aufruf von Listener in anderer Klasse Java Basics - Anfänger-Themen 9
S Key-Listener richtig "einbauen" Java Basics - Anfänger-Themen 42
S Listener von ausserhalb aufrufen Java Basics - Anfänger-Themen 2
S Action Listener Java Basics - Anfänger-Themen 6
Sweety Listener in Swing Java Basics - Anfänger-Themen 8
Hamstinator Design und Listener in verschiedenen Klassen Java Basics - Anfänger-Themen 6
Developer_X Mouse MOTION listener example Java Basics - Anfänger-Themen 5
J Mouse-Listener Java Basics - Anfänger-Themen 3
I Listener Klassen in Package Java Basics - Anfänger-Themen 3
StickToFreak Applet -> GameLoop + Listener / Listener funktioniert nicht Java Basics - Anfänger-Themen 22
B externer Listener für Zeichenbereich? Java Basics - Anfänger-Themen 2
D dialog listener? Java Basics - Anfänger-Themen 2
G Key Listener arbeitet Fehlerhaft Java Basics - Anfänger-Themen 6
C Listener und Events Java Basics - Anfänger-Themen 10
E Listener Java Basics - Anfänger-Themen 2
hdi keylistener hat keinen fokus oder: listener ohne frame? Java Basics - Anfänger-Themen 10
G jtable listener wenn zeile markiert wird Java Basics - Anfänger-Themen 6
S Action Listener Funktioniert nicht Java Basics - Anfänger-Themen 6
D Kombinationsfeld => Realisierung im Listener? Java Basics - Anfänger-Themen 2
G LIstener bei JavaMail Java Basics - Anfänger-Themen 2
G Context Listener des Apache Tomcat verwenden Java Basics - Anfänger-Themen 4
D Listener bzw. Interfaces Java Basics - Anfänger-Themen 7
A Wo/Wie Event Listener Java Basics - Anfänger-Themen 3
G Window Listener? Java Basics - Anfänger-Themen 2
G 2 Listener wiedersprechen sich. Java Basics - Anfänger-Themen 12
G Listener für JPanel für Statusmeldungen Java Basics - Anfänger-Themen 3
F Listener für Variable Java Basics - Anfänger-Themen 29
A Gibt es standardmässig in Java einen Verzeichnis-Listener? Java Basics - Anfänger-Themen 6
N Listener für datei Java Basics - Anfänger-Themen 13
S Mit Listener AWT Objekte ansprechen Java Basics - Anfänger-Themen 2
G listener für radiobutton Java Basics - Anfänger-Themen 1
G Listener Java Basics - Anfänger-Themen 5
G Listener Problem Java Basics - Anfänger-Themen 3
B Wiso funktioniet das nicht? (Listener) Java Basics - Anfänger-Themen 6
T Wartet Klasse auf Listener? Java Basics - Anfänger-Themen 3
D Listener? Java Basics - Anfänger-Themen 2
S Listener auf JTextfeld Java Basics - Anfänger-Themen 8
B Kommunikation zwischen Klasse und Listener Java Basics - Anfänger-Themen 2
C Benutzereingaben vor Listener abfangen Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben