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
REGULAMINEMTytuł 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