Problem z KeyListenerem

Problem z KeyListenerem
QK
  • Rejestracja:około 19 lat
  • Ostatnio:prawie 16 lat
0

Zgłaszam swój problem z keyListener ponieważ te co są umieszczone na forum niestety mi nie pomogły. Mam prośbe o szybką odpowiedź co może być źle.

// obsługa listenera

Kopiuj
private void formKeyPressed(java.awt.event.KeyEvent evt) {                                
       int kodklawisza = evt.getKeyCode();
        if (kodklawisza==KeyEvent.VK_ENTER) {
            try {
                pol(nazwa_uzytkownika.getText(), haslo_uzytkownika.getText());
                this.setVisible(false);
            } catch (SQLException ex) {
                ex.printStackTrace();
            } catch (ClassNotFoundException ex) {
                ex.printStackTrace();
            }
        }
    }    

//a tak dodany jest do ramki

Kopiuj
addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                formKeyPressed(evt);
            }
        });

Wszystko pod NetBeans. ale nie wiem czy akurat tutaj o środowisko chodzi.

Pozdrawiam i czekam na szybką odpowiedź.

Koziołek
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:3 dni
  • Lokalizacja:Stacktrace
  • Postów:6821
0

Kod jest w sumie dobry (z punktu widzenia kompilatora), a jakie są objawy błędu?

Swoją drogą... kod nie jest do końca dobry (z punktu widzenia zasad programowania). Co to za zapytania SQL i łapanie SQLException w tym kodzie robią :D ? W ten sposób nie powinno się pisać. Naciśnięcie klawisza powinno wywołać metodę pol(), która powinna nie rzucać wyjątkami, ale zwrócić mapę z kluczem "errors", "bledy" itp.:

Kopiuj
private void formKeyPressed(java.awt.event.KeyEvent evt) {                               
       int kodklawisza = evt.getKeyCode();
        if (kodklawisza==KeyEvent.VK_ENTER) {
                Map<String, Object> map = pol(nazwa_uzytkownika.getText(), haslo_uzytkownika.getText());
                if(!map.isEmpty())
                  this.setVisible(false);
                else if(map.get("error")!=null){
                   // obsługa błędu
                }
        }
    }

Jeszcze lepiej jak by, całość opierała się o jakiś interfejs, za pomocą którego obsługiwane były by kliknięcia. Metoda formKeyPressed() powinna pochodzić z napisanego przez Ciebie interfejsu, podobnie jak pol(). W ten sposób można łatwo w razie czego wymienić implementację.


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
QK
  • Rejestracja:około 19 lat
  • Ostatnio:prawie 16 lat
0

Dzięki za zwrócenie uwagi na zasady pisania programu. :)

Pomijając w/w błędy (zajmę się tym później) Problem tkwi w tym że po wciśnieciu przycisku ENTER program w ogóle nie raguje :/ dlatego pomyślałem ze błąd tkwi gdzies w kodzie :/

Czekam na dalsze porady i dzięki za dotychczasowe :)

Pozdrawiam!

Koziołek
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:3 dni
  • Lokalizacja:Stacktrace
  • Postów:6821
0

A czy lecą jakieś wyjątki? To raz, a dwa, spróbuj dopisać elsa po ifie sprawdzającym jaki klawisz wciśnięto i tam wstawić jakiś debug, który sprawdzi czy przez przypadek if nie jest olewany.


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
QK
  • Rejestracja:około 19 lat
  • Ostatnio:prawie 16 lat
0

Hej. Wyjątki żadne się nie pokazują i dlatego nie moge nic na ten temat wiecej powiedzieć. Wstawiłem else i też nie reaguje na przycisk :/ Nie wiem o co chodzi. Jakiś pomysł albo sugestia??

Dzięki z góry.

Pozdrawiam!!

0

do jakiego obiektu podpięty jest KeyListener ?
co jest aktywne (ma fokus) gdy użytkownik naciska Enter ?
pozdrawiam

0

Czy nie powinieneś przeciążyć metod:

Kopiuj
public void keyPressed(KeyEvent e) 
public void keyReleased(KeyEvent e) 
public void keyTyped(KeyEvent e) 

Gdy implementujesz interfejs KeyListener ?

Kopiuj
class Sluchacz implements KeyListner {
	public void keyPressed(KeyEvent e)  {
	}
	public void keyReleased(KeyEvent e) {
	}
	public void keyTyped(KeyEvent e) {
	}
}
QK
  • Rejestracja:około 19 lat
  • Ostatnio:prawie 16 lat
0
bogdans napisał(a)

do jakiego obiektu podpięty jest KeyListener ?
co jest aktywne (ma fokus) gdy użytkownik naciska Enter ?
pozdrawiam

Hej właśnie do końca nie wiem do czego jest podpięte wydaje mi się że do ramki bo tą cześć kodu NetBeans generuje. Podpiełem pod panel i też nic się nie dzieje tzn bez zmian. Ale gdy np. podpiełem pod pole tekstowe to zadziałało. Czyli zależy od tego gdzie jest podpięty i czy to coś ma focusa w tym przypadku pole tekstowe. A jak np. zrobić żeby było podpięte do ramki i działał??

Dzięki za podpowiedź :)

Pozdrawiam!

0

Spróbuj wywołać (w odpowiednim miejscu)

Kopiuj
ramka.requestFocus();

,
ale to jest bardzo niepewne, użytkownik w coś sobie kliknie i przeniesie fokus.
Ewentualnie podepnij tego KeyListenera do wszystkiego co widać.
pozdrawiam

0

Nie musi do wszystkiego, jest taka opcja gdzies ze zdarzenai dzieciecych kontrolek jesli nie sa obslugiwane przez sama kontrolke to sa wysylane do rodzica, i tak dalej itd, az w koncu moze dojsc do samej formy.

QK
  • Rejestracja:około 19 lat
  • Ostatnio:prawie 16 lat
0

Dzięki za pomoc, popatrze jeszcze w necie co jest z tymi keylistenerami i focusami zeby to było bardziej efektywne niż poprzypinanie tego do wszystkiego co się da :P

W każdym razie pomogliście mi i za to dziękuje

Pozdrawiam!!

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)