Strona 1 z 1

[Java] Zamiana wpisywanego łańcucha w locie

: 25 lip 2013, 15:27
autor: yanan
Witam
Mam pytanie jak zrealizować zamianę tekstu w locie przy wykorzystaniu JEditorPane.
Czyli wpisujemy w JEditorPane np. aaa, a program wykrywając tekst aaa zamienia go na bbb.
Reszta tekstu nie może ulec zmianie. Próbowałem na KeyListenerach, ale one wykrywają tylko jeden znak, a nie całe łańcuchy i nawet jakby się to dało zrobić na tych keylistenerach to i tak nie byłoby to zbyt dobre podejście. Proszę o jakiekolwiek pomysły :)

Pozdrawiam

Re: [Java] Zamiana tekstu

: 26 lip 2013, 20:51
autor: castor_troy
Zmień tytuł tematu tak, aby w sposób możliwie precyzyjny przedstawiał sedno sprawy, w której piszesz. Miej na uwadze również zgodność z REGULAMINEM
Tytuł tematu zmienisz edytując pierwszy post
W razie wątpliwości/zastrzeżeń odnośnie powyższej informacji skontaktuj się z moderatorem, który ją wstawił.


Za naciskiem na TREŚCIWY.

Re: [Java] Zamiana wpisywanego łańcucha w locie

: 26 lip 2013, 21:47
autor: socrates
Teoretycznie po 1 znaku powinno wystarczyc chyba ze chcesz sie zabezpieczyc przed kopiuj - wklej to jedynie co mi przychodzi do glowy to napisanie funkcji badajacej kazdy znak i ewentualnej zamianie.
Mnie zawsze wystarczalo sprawdzanie pojedynczego znaku za pomoca KeyTyped

Re: [Java] Zamiana wpisywanego łańcucha w locie

: 27 lip 2013, 14:35
autor: yanan
No właśnie nie wiem czy to jest dobry pomysł. Czuje dużą liczbę if-ów i trudno sobie wyobrazić co się stanie przy dłuższych łańcuchach...

-- 28 lip 2013 12:28 --

Java mnie jednak potrafi zadziwić... Zamianę realizuje jedna linia kodu :)
Dla przyszłych pokoleń wstawiam jak to zrobiłem:

Kod: Zaznacz cały

        textPane.addKeyListener(new KeyListener() {

			@Override
			public void keyPressed(KeyEvent arg0) {
			
	
			}

			@Override
			public void keyReleased(KeyEvent arg0) {
				System.out.println(arg0.getKeyCode());
				if (arg0.getKeyCode() == 65)  {
					if (arg0.isControlDown()) {
	            	                                        textPane.selectAll();
	            	  		
	            	  	}
	            	}
				else{
					if (arg0.getKeyCode() != 17)  {
					  textPane.setText(textPane.getText().replaceFirst("aaa", "bbb"));
					}
				}
				
			
			}

			@Override
			public void keyTyped(KeyEvent arg0) {
				
			}
        	
        });
Dodatkowo musiałem obejść skróty klawiaturowe (automatyczne wcięcia [SHIFT] + komentarze [CTRL + /] + zaznacz wszystko [CTRL + A])
W przykładzie obejście CTRL + A (Zaznacz wszystko) inaczej tekst będzie zaznaczony, ale na krótką chwilę.

Pozdrawiam