Diskuze: javafx update TableView ObservableListu
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 15 zpráv z 15.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj, je opravdu potřeba upravovat tabulku pomocí externích textboxů?
Jednodušší by bylo upravovat rovnou řádky v tabulce.
Mimochodem příkaz:
table.getSelectionModel().getSelectedItem()
ti vrátí referenci na tvoje UserData, takže tam bys rovnou mohl ty data měnit, tedy za předpokladu, že ve třídě UserData máš i settry pro dané property.
Když tomu nebudeš rozumět, tak napiš a já to vysvětlím lépe...
díky moc, přesně, jak tam dostat ty settry?
Pak bych mohl psát něco jako
data.setKod(txtOperator.getText());
Settry dáš normálně do třídy UserData.
Jenom bych se chtěl zeptat, proč používáš StringProperty místo
obyčejného Stringu?
public void setOperator(String operator) {
// Tady máš dvě možnosti:
// 1. Necháš si StringProperty a pak bude setter vypadat takto:
this.Operator = new SimpleStringProperty(Operator);
// 2. Nebo upravíš StrinProperty na obyčejný *String* a pak to bude takhle:
this.Operator = operator.
}
>proč používáš StringProperty
někde jsem čet, že se to tak má dělat 
čerpal jsem tady, podle mého zmateného dotazu tam:
http://www.javafxapps.in/…atabase.html
ale teď tam to zdůvodnění StringProperty nevidím, že by někde jinde..?
v celkovém kontextu toho vzpomínaného vzoru to nebude tak prosté.
Když použiju obyčejný String, musel bych předělat i kód na plnění TableView, takto to TableView nenaplní.
A když nechám StringProperty, tak ty settery sice projdou překladačem,
ale jejich volání
data.setKod(txtOperator.getText());
vypíše:
cannot find symbol
symbol: method setKod(String)
location: variable data of type ObservableList<UserData>
a ani nezmiňuje, že to není String, ale StringProperty, a přetypovat mi to
nějak nejde.
Ještě, že chodí ta původní konstrukce 
//mám referenci
table.getSelectionModel().getSelectedItem()
//mám ten setter
setKod
//rýsuje se
data.setKod
//mám hodnotu, kterou to chci naplnit
txtOperator.getText()
//ale nevymyslel jsem, jak to zapsat.
Tak mě napadla ještě jedna možnost. Ty teda chceš při výběru řádku
v tabulce, aby jsi data mohl editovat někde v textových polích.
Když vybereš řádku v tabulce, tak pomocí
table.getSelectionModel().getSelectedItem()
si vytáhneš referenci na daný řádek a uložíš si jí někam do proměnné. Dále z této reference vytáhneš data a zobrazíš je v textfieldech. Nakonec nadefinuješ každému textfieldu, že třeba po zmáčknutí ENTERU se uloží hodnota z textfieldu do dat. To uložení by neměl být problém, protože máš referenci na právě vybraná data.
//a uložit to ..právě .. nevím jak
//udělal jsem dva pokusy, oba špatné, první toto:
UserData vybrano = (UserData)
table.getSelectionModel().getSelectedItem();
vybrano.setKod(txtOperator.getText());
//uloží data, ale mimo 
//a druhý nápad
data.setKod(txtOperator.getText());
//je nesmysl, protože není použita reference a nevím, kam ji tam "v
máčknout"
To první by mělo být správně, já to takhle píšu. Jestliže Ti to
nefunguje, tak bude problem s tím settrem.
Jo ještě jsem si všiml, že přetypováváš ten selectedItem na správný
typ - tomu se dá vyhnout tak, že tabulce nastavíš, jaký bude uchovávat
data.
TableView table = new TableView<UserData>();
//Díky za typ tabulky, už nepřetypovávám
.
//Asi se špatně vyjadřuju k původnímu problému. Jak píšu výše,
tohle chodí:
//vymažu a přidám
data.remove(table.getSelectionModel().getSelectedItem());
data.add(new UserData(txtOperator.getText(), txtKod.getText(),
txtSkupina.getText()));
//jak zapsat update, mám-li settry a referenci?
//totiž, použiju-li to vybráno, viz. výše tak to je nová instance původního jediného záznamu a s tou pracovat nemá smysl ... aspoň já to tak chápu. Musím to zapsat do těch dat "data" na místo dané referencí.
table.getSelectionModel().getSelectedItem()
Ti nevrátí novou instanci, pouze referenci, proto s tim můžeš manipulovat jak potřebuješ. Na ty settery se ještě podívám.
Chtěl bych se omluvit za špatnou nápovědu ohledně těch settrů. Teď jsem to zkoušel a snad našel řešení:
public void setOperator(String Operator) {
this.Operator.setValue(Operator);
}
Teď by ten setter už měl fungovat správně.
D ě k u j i.
Je to tak, funguje.
Není vůbec zač, jenom by bylo dobré, kdyby jsi označil správné
řešení 
Zobrazeno 15 zpráv z 15.