Na pewno nie Combo.
Widget (byc moze) 'Text' obok przycisk uruchamiajacy funkcjonalnosc
filtrowania (np. Button z trzema kropkami, czy ze szklem powiekszajacym).
30.000 pozycji w ComboBox-ie bedzie napewno fajnie się przegladać.
Proponuje jeszcze losową kolejność. Użytkownicy będą zachwyceni.
Ja bym zrobił jakiś widget (np z JTable) i koniecznie jakis mechanizm do
filtrowania.
Adam
Mam jeszcze jedno pytanie, w jaki sposob, bez uzycia petli, przeniesc
zawartosc
ArrayList<Object> do String[].
Probowalem robic cos takiego:
ArrayList<ObjOriginal_nr> tabWithRecords;
....................
String[] row = (String[]) tabWithRecords.toArray();
niestety dostaje komunikat:
java.lang.Object; cannot be cast to java.lang.String;
W petli for idzie to oczywiscie bezblednie ale sadze ze istnieje jakas inna
prostsza metoda i wlasnie o to pytam.
--
jopotam
> ArrayList<ObjOriginal_nr> tabWithRecords;
PS. Deklaracje zmiennych zaleca sie robic na typie bardziej
abstrakcyjnym (List<ObjOriginal_nr>) a inicjowac na konkretnym.
Dlaczego? Bo tak w OP sie robi ...
PPS. Mam zle przeczucia, ze to jest zaprojektowane na Object.
> .....................
> String[] row = (String[]) tabWithRecords.toArray();
Tablice (i ogolnie kontenery) nie daja sie rzutowac co do typu bazowego.
To jakby jeden na chlopski rozum poziom wewnatrz, a rzutuje sie typ
zewnetrzny.
> Tablice (i ogolnie kontenery) nie daja sie rzutowac co do typu bazowego.
> To jakby jeden na chlopski rozum poziom wewnatrz, a rzutuje sie typ
> zewnetrzny.
Dzieki,
chyba ja nigdy nie pojme tej Javy.
Mam w okienku SWT pare pol typu Text do wprowadzania danych.
Jedno z pol nie moze byc puste wiec postanowilem zastosowac do tego pola
FocusListener.
W metodzie focusLost daje komunikat po czym probuje ustawic fokus z powrotem
na omawiane pole. Komunikat sie owszem ukazuje ale fokus nie powraca do
wybranego pola.
Probowalem setFocus () i forceFocus () bez zadnego rezultatu, obie metody
zwracaja "false".
Powiedz mi jak w javie SWT daje sie wrocic do wprowadzanego pola jesli
wartosc jest niezgodna z przeznaczeniem?
--
jopotam
Nie Javy tylko tu mowa o bibliotece SWT. Nie jest to czesc jezyka Java.
Za twoim pytaniem nie moge teraz szukac, nie mam mozliwosci.
Pewnie w argumencie Event cos trzeba na false, ale nie bede sie upieral.
String[] row = tabWithRecords.toArray(new String[0]);
String[] row = tabWithRecords.toArray(new String[tabWithRecords.size()]);
ew. trzeba będzie zrzutować.
--
Boguś
> Dzieki,
> chyba ja nigdy nie pojme tej Javy.
> Mam w okienku SWT pare pol typu Text do wprowadzania danych.
> Jedno z pol nie moze byc puste wiec postanowilem zastosowac do tego pola
> FocusListener.
> W metodzie focusLost daje komunikat po czym probuje ustawic fokus z
> powrotem na omawiane pole. Komunikat sie owszem ukazuje ale fokus nie
> powraca do wybranego pola.
Możesz użyć Display.getCurrent().asyncExec. Można też słuchać
org.eclipse.swt.events.KeyListener i na klawisz TAB ustawić
org.eclipse.swt.events.KeyEvent.doit = false, ale nie wiem, na ile to jest
przenośne.
--
Boguś
String[] row = tabWithRecords.toArray(new String[0]);
String[] row = tabWithRecords.toArray(new String[tabWithRecords.size()]);
ew. trzeba będzie zrzutować.
probowalem zastosowac Twoja propozycje i z rzutowaniem i bez z jednakowym
komunikatem, ponizej:
java.lang.ArrayStoreException
at java.lang.System.arraycopy(Native Method)
at java.util.Arrays.copyOf(Arrays.java:2763)
at java.util.ArrayList.toArray(ArrayList.java:305)
tabWithRecords jest lista obiektow a ja chcialbym zaladowac do String[]
tylko wartosc jednego pola obj.getOriginal_nr () bez uzycia petli for.
Mysle ze jednak jest to do zrobienia tylko nie mam na tyle doswiadczenia z
java zeby sobie z tym poradzic.
W poprzednim poscie Jacek pisal ze:
"Tablice (i ogolnie kontenery) nie daja sie rzutowac co do typu bazowego.
To jakby jeden na chlopski rozum poziom wewnatrz, a rzutuje sie typ
zewnetrzny."
--
jopotam
> Za twoim pytaniem nie moge teraz szukac, nie mam mozliwosci.
>
> Pewnie w argumencie Event cos trzeba na false, ale nie bede sie upieral.
>
Po sprawdzeniu okazuje sie, ze FocusEvent nie ma pola boolean z
zezwoleniem na wykonanie (jak niektore inne Eventy).
Mozesz sprobowac w zdarzeniu odnotowac sobie w zmiennej problem
walidacyjny, i na wyzszym poziomie wymusic setFocus() (nie wymyslilem
jeszcze w jakim zdarzeniu). Takie gdybanie. Jak sie wczuwam w filozofie
SWT, uzycie setFocus z wnetrza takie zdarzenia moze byc zakazane (ale
nie znalazlem takiej informacji)
Chyba najbardziej eleganckim sposobem jest przejscie na poziom Jface,
tam wszystko do wysokopoziomowej walidacji jest wbudowane.
Fajne, ale dosc ambitne.
http://eclipse.dzone.com/articles/adding-swt-input-validation-ea?page=0,0
> Użytkownik "Boguś" <no...@invalid.net> napisał
>
> String[] row = tabWithRecords.toArray(new String[0]);
> String[] row = tabWithRecords.toArray(new String[tabWithRecords.size()]);
>
> ew. trzeba będzie zrzutować.
>
> probowalem zastosowac Twoja propozycje i z rzutowaniem i bez z
> jednakowym komunikatem, ponizej:
> java.lang.ArrayStoreException
Jakoś się zasugerowałem, że masz List<String> a nie List<CośInnego>. To co
chcesz zrobić to tylko pętlą.
--
Boguś