Wildcards Java

C1
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 6 lat
  • Postów:35
0

Mam pytanie. Zrobiłem wyszukiwanie w tabeli JTable słowa wpisanego w jTextField.
I problem polega na tym, kod ten znajduje dokłanie taki sam tekst . A Jak zrobić wyszukiwanie typu Wildcard ?
że wpisze np 4 pierwsze litery np ( wpisze w jTextField brow i zaznaczy mi w tabeli wiersz "browar"

kod :

Kopiuj
 String b = jTextField1.getText();
        for(int i=0;i<jTable2.getRowCount();i++) {
        for(int j = 0; j < jTable2.getColumnCount(); j++){
        if (jTable2.getValueAt(i, j).equals(b)) { 
        jTable2.changeSelection(i, j, true, false);
      }
      }
      }
KK
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 8 lat
  • Postów:68
0

nie znam sie ale na logike skoro szukasz wpisując słowo 4 literowe to niech przeszukuje patrząc na pierwsze 4 litery.


Uczę sie
C1
No tak, tylko nie bardzo wiem jak to zrobić ,żeby sprawdzało 4 pierwsze litery komórki tabeli ;/
szweszwe
  • Rejestracja:ponad 11 lat
  • Ostatnio:12 dni
  • Lokalizacja:Kraków
  • Postów:1694
2

Dla stringów zobacz sobie metode contains.

__krzysiek85
  • Rejestracja:ponad 18 lat
  • Ostatnio:ponad 9 lat
  • Postów:1019
3

Jeżeli chcesz wyszukiwać po początku, to zamiast "equals" użyj "startsWith".

http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#startsWith%28java.lang.String%29


Registered Linux user #456405 | SCJP 6 | SCWCD 5 | SCBCD 5
C1
po zmianie equals na startsWith kod się nie kompiluje ;/
C1
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 6 lat
  • Postów:35
0

Faktycznie metodą contains można to zrobić tylko nie bardzo rozumiem jak to działa, analogicznie po przeczytaniu dokumentacji dodałem linijkę drugą b.contains(b); i wywala błędy ;/

Kopiuj
 String b = jTextField1.getText();
        b.contains(b);
        for(int i=0;i<jTable2.getRowCount();i++) {
        for(int j = 0; j < jTable2.getColumnCount(); j++){
        if (jTable2.getValueAt(i, j).equals(b)) { 
        jTable2.changeSelection(i, j, true, false);
      }
      }
      }
szweszwe
Bo bez sensu jest b.contains(b), sprawdź sobie jak to działa dla dwóch różnych stringów.
C1
Sprawdziłem , zwraca wartość true i false, jednak jak to użyc dla wartości zawartych w tabeli ??
szweszwe
Wywal to b.contains(b) po prostu.
C1
Zawartość wierszy jTable z jTextField
szweszwe
No wywal to co napisałem.
C1
No tak ale wtedy porównuje i zaznacza wiersz który jest identyczny jak zawartosc jFieldText, a chodzi mi o wyszukiwanie typu Wildcards. Ze po wpisaniu załóżmy prog* w jtextField zaznaczy mi w tabeli wiersz z zawartością "program"
szweszwe
aj, bo ja myślę o contains, weź to zmień na tego contains o którym pisałem i sobie wtedy zobacz, chociaż to doskonałe nie bedzie ale może Cię zadowoli.
C1
Kurcze nie wiem czy źle zrozumiałem czy jak, ale contains dodajemy do rzeczy której poszukujemy. Czyli w moim przypadku do TextFielda. Ale jak dodam nawet do"if (jTable2.getValueAt(i, j).equals(b.contains(b))){ to wywala NullPointerException ;/ Jak wyłapie ten wyjątek to nic nie zaznacza ;/ Sorry jeśli nie kumam prostych rzeczy ale jestem początkującym i chce się czegoś nowego dowiedzieć ;)
szweszwe
Drogi Adamie, miałem na myśli coś takiego: jTable2.getValueAt(i, j).contains(b)
C1
Rozumiem, ale próbowałem tak wcześniej za pierwszym twoim postem lecz program się nie kompiluje ;/ wywala RunTimeException ;/
C1
Tak samo kolega wyżej zasugerował startsWith, jednakże jest ten sam problem, jeżeli użyje zamiast equals to wywala RunTime, a jeżeli dodam do b to wywala NullPointer ;/
szweszwe
Bo pewnie nie masz jeszcze wtedy nic przypisane do b. Pokaż cały kod albo Ci nic nie pomogę.
C1
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 6 lat
  • Postów:35
0

Cały kod odpowiedzialy za wyszukiwanie. Model Tabeli mam standardowy (DefaultTableModel), Tabela jest wypełniona danymi typu Object.

Kopiuj
 private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        String b = jTextField1.getText();
        for(int i=0;i<jTable2.getRowCount();i++) {
        for(int j = 0; j < jTable2.getColumnCount(); j++){
        if (jTable2.getValueAt(i, j).equals(b)) { 
        jTable2.changeSelection(i, j, true, false);
      }
      }
      }
    }                  
Zobacz pozostałe 7 komentarzy
szweszwe
Może ten drugi wiersz daje ten błąd. Popróbuj sam i jak nic nie wymyślisz to wróć może bo ja nie mam pomysłów :)
C1
Przez Chwile myslałem że może jest to wina tego że mam z 40 pustych wierszy w tabeli jednak po ich usunięciu problem pozostał ;/
C1
fakycznie problem był w drugiej linii kodu po ustawieniu " jTable2.changeSelection(i, j, false, false); wszystko działa jak należy :) Dziękuje szweszwe za pomoc :)
szweszwe
Spoczko, daj mi łapkę jak możesz albo fajeczkę, strasznie się cieszę z tych punktów :D
C1
Z miłą chęcią :) Bardzo Ci dziękuję :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.