Diskuze: Práce s grafickými komponenty
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 21 zpráv z 21.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
S JavaFX mám jen minimální zkušenosti, ale aspoň se pokusím - máš ty data v něčem co
implementuje interface Observable? S tím si totiž standardní widgety v JavaFX
rozumějí out-of-box - prostě máš data třeba v
ObservableList<TvůjTyp> a ty zobrazuješ v
ListView<TvůjTyp>.
To propojení zajistíš pomocí setItems(ObservableList) na ListView a máš
hotovo. Když pak něco přidáš/upravíš/odebereš v ObservableList tak se
to automaticky projeví v ListView.
Bohužel GridPane tuto metodu neobsahuje Navíc o tento problém mi nešlo,
to se dá obejít. Jde o to, že jiná než JavaFX vlákna nemohou manipulovat s
grafickými komponenty, jinak se vyvolá výjimka uvedená výše. Vše už jsem
ale vyřešil, takže mám už zase jiný problém
Neposkytl jsi žádné bližší info, takže jsem možná mimo, ale ty používáš na zobrazení tabulky dat GridPane? Nebylo by lepší TableView?
S tebou souhlasím. S TableView to bylo porprvé težké, ale naučil jsem se to a přišel jsem i na to, jak obnovit v něm data.. table.getColumn().clear(); a následně znovu přidat všechny sloupce: table.getColumn().addAll(column1, column2, column3);
Máš pravdu, to bude lepší Už jsem překopal aplikaci, která teď používá TableView. Jak už
jsem říkal, vynáším do tabulky objekty(data). Pokud se změní seznam
těchto objektů, data v tabulce se automaticky obnoví. Pokud však změním
jenom nějaký vnitřní stav objektu, nic se samozřejmě nestane. Potřeboval
bych tedy nějakou metodu na refreshování tabulky, nebo lépe jen jednoho
sloupce. Bohužel s tím nemám ale žádné zkušenosti, takže zase prosím o
pomoc.
K tomu slouží JavaFX properties. Vystavíš fieldy objektu, které chceš aby TableView sledovalo pomocí property getterů, např máš-li třídu Person a v ní String field name, tak udělej getter
public SimpleStringProperty nameProperty()
{
return name;
}
a mělo by to snad fungovat.
Tak to nějak nefunguje. Pokud změním hodnotu SimpleStringProperty
pomocí metody set, v tabulce se nic nezmění. Ale podle všech zdrojů by to
mělo fungovat, takže se ještě pokusím to rozchodit Díky za radu!
obnovení tabulky jsem vyřešil jednoduše
table.getColumn().clear();
table.getColumn().addAll(column1, column2, column3);
A máš to v nějaké té Observable kolekci? Protože jestli ne, tak to fungovat nebude.
Tak jasně, takhle už jsem to měl taky. Jde o to, že vlákno poběží na
pozadí programu a potřebuju, aby bylo co nejvýkonnější. Beru to jako
poslední řešení
Hmm tak pak nevím, taky může jít o nějaký bug, četl jsem kdesi že konkrétně okolo TableView nějaký takový byl, jestli už je to opravené to nevím.
Taky je problém v tom, že se mi místo hodnot do tabulky vypisuje metoda toString() z SimpleStringProperty. Takže místo "hodnota" mám v tabulce něco jako "SimpleStringProperty[value="hodnota"]".
Hele tak nejspíš jsem tě nechtíc mystifikoval zastaralým postupem - dneska už se koukám v JavěFX dělá zas všechno jinak - http://docs.oracle.com/…rmediate.htm#… je dobrý tutoriál jak se s TableView zachází podle nejnovějších principů. Mimochodem, časté překopávání JavaFX je jedním z důvodů, proč jsem tomu nikdy nevěnoval víc než letmou pozornost...
V tom článku je ukázán de-facto stejný postup, jaký jsi mi předložil
Stále ale nefunguje
obnovování dat. Zkusím nějaké uvedené zdroje, třeba se to povede
Princip je prakticky stejný, změnila se jmenná konvence - teďka ty
gettery a settery odpovídají více klasickým Java Bean konvencím, takže
začínají get a set. Zkusil jsem si narychlo zplácat jednoduchý Address book
podle toho jak je to v tom tutotiálu co jsem sem hodil, a funguje to dle
očekávání, takže tam někde máš nějakou zradu
Funguje i obnovování dat? Tím myslím, když změníš vnitřní stav zobrazovaného objektu, změní se i data v tabulce?
Juch Tak konečně to
snad bude fungovat! Šel jsem na to přes vlastní TableCell a vypadá to
dobře. Teď se ale zase nějak pomátla databáze, ze které data vytahávám,
takže práce zase dost
Díky všem za pomoc!
Ahoj, chtěl bych se zeptat jak si se vypořádal s tou chybou, co zmiňuješ
nahoře.Mám trošku jinou: java.lang.IllegalStateException: Not on FX
application thread; currentThread = pool-2-thread-1
Jedná se o jeden prográmek, kde po každé minutě to spustí metodu, která
zjistí jestli je nějkaý čas uvnitř textfieldu stejný s realným časem a
pustí mi to dialogové okno, --> Alert. A okno mi to nespustí a napíše
chybu.
Zobrazeno 21 zpráv z 21.