Diskuze: Tabulka a buňky
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 11 zpráv z 11.
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.


Nedokážu si to plně představit. Kdybys přiložil zdrojový kód, tak by
to možná pochopilo ještě více lidí 
No zkusim to sem dát.
Tohle je Event na tlačítko pro kontrolu matice, kde se mi nahrajou data z tabulky (přes kontroly) do matice typu Matice. mat Matice je složená z vektorů typu Vektor, kterej je složenej z ArrayListu (kvůli libovolnosti počtu prvků). Nechci to psát moc složitě ale jinak to asi nejde.
public class Event implements ActionListener { //kontrola matice
@Override
public void actionPerformed(ActionEvent e) {
table.clearSelection(); //odaktivnění všech buněk - nefunguje tak jak potřebuju
//pocetni operace
pV = new Vektor[pocetVektoru];
double[] pole = new double[pocetPrvku];
for (int i = 0; i < pocetVektoru; i++) {
pV[i] = new Vektor();
}
pole[0] = 0;
boolean f = true;
for (int i = 0; i < pocetVektoru; i++) {
for (int j = 0; j < pole.length; j++) {
try {
pole[j] = Double.parseDouble((String) m.getValueAt(j, i));
} catch (NumberFormatException d) {
f = false;
buton.setBackground(Color.red);
} catch (NullPointerException s) {
if (m.getValueAt(j, i) == null) {
pole[j] = 0;
m.setValueAt(0, j, i);
}
}
}
Vektor a = new Vektor();
a.setVektor(pole);
pV[i] = a;
}
if (f) {
elHbut.setEnabled(true);
elDbut.setEnabled(true);
detBut.setEnabled(true);
butZav.setEnabled(true);
} else {
buton.setEnabled(f);
view.setVisible(true);
view.setForeground(Color.red);
view.setText("Chybné zadání!");
}
f = true;
mat = new Matice(pV);
}
m je DefaultTableModel
private JTable table() {
m.setColumnCount(pocetVektoru);
m.setRowCount(pocetPrvku);
table = new JTable(m);
// grid.gridx = 0;
// grid.gridy = 0;
// con.add(table, grid);
JScrollPane sp = new JScrollPane(table,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
return table;
}
tohle je metoda pro vytvoření tabulky JTable na DefaultTableModel
problém je, že když nechám zakliknutej poslední prvek v tabulce, do matice (mat Matice) se mi uloží jako null - v tabulce se pak zobrazuje jen prvek, kterej jsem tam vyplnil
lze nějak nastavit, aktivní jinej prvek tabulky, třeba hned v tom Event?
Je to pochopitelnější? 
No doufal jsem v celý zdrojový kód, abych si to mohl vyzkoušet
)). Ale to nevadí. Z toho
tvého popisu mě napadlo, že bys mohl označit jako aktivní nějaký jiný
prvek než tabulku, třeba přímo JFrame nebo JDialog, ve kterém je ta tabulka
umístěná. Slouží k tomu metoda requestFocus() (napr. frame.requestFocus()
). A tu bys zavolal jako prvni v obsluze udalosti.
hale to zní docela zajímavě 
každopádně vyzkoušim, díky za tip, napíšu jestli to tak funguje, kdyby s
tim měl problém i někdo jiný 
Tak bohužel requestFocus nezabral, stále to poslední prvek tabulky
převádí jako null ...
,
zkoušel jsem i table.clearSelection, ale taky bohužel nezabralo.
Když jsem to zkusil bez try, catch(kdybych ho náhodou napsal špatně), stejná chyba. Zkrátka, jakmile nechám aktivní poslední buňku, přečte se jako null.
Jo, promiň. Budou stačit všechny zdrojáky jen jako .java soubory?
Jo, je to v pohodě. Já si to nějak sestavím. V týdnu se na to podívám
a pak dám vědět s nějakým případným řešením. Ale ještě me teď
napadlo, jak jsi psal, že když před potvrzením klikneš na jinou buňku, tak
se ti ta matice sestáví správně, tak by tu byla možnost ještě v podobě
použití Robota. Tahle třída za tebe vlastně udělá to samé, co bys dělal
jako uživatel (tzn. odkliknutí na jinou buňku). Metodou mouseMove(int x, int
y) řekneš robotovi kam má najet myší a metodami mousePressed(int a) a
mouseReleased(int b) řekneš robotovi aby klikl a odklikl. Jako parametr
zadavas konstantu tlacitka, kterým klikas (BUTTON_MASK1 - L tlačítko,
BUTTON_MASK2 - P tlačítko).
viz. https://docs.oracle.com/…t/Robot.html
Ale je to takové řešení přes ruku ... 
Děkuju moc, určitě to bude nějaká pitomost.
Hehe, s tim robotem je to zajímavý, pročtu si to a pokusim se to použít,
i když to asi nebude úplně čistý řešení no. 
Každopádně díky moc za tvůj čas, že na to mrkneš.
Tak jsem to zkusil, a co se týče tvého problému, tak jsem žádný nenašel. Funguje mi to úplně normálně. Poslední hodnota se zapíše, i když je buňka aktivní. Jinak ve třídě MatrixGui v metodě table() dáváš JTable do JScrollPane, ale ta tvá metoda vraci jenom tabulku, takže se ti na hlavní panel JScrollPane nepřidá. A ještě poznámka k GridBagConstrants
buton = new JButton("Kontrola matice");
grid.gridx = 0;
grid.gridy = 2;
con.add(buton, grid);
elHbut = new JButton("GEM - horní");
elHbut.setEnabled(false);
grid.gridx = 0; // TOHLE TU BÝT NEMUSÍ (UŽ JE TO NASTAVENO OD PŘEDCHOZÍHO KROKU)
grid.gridy = 3;
Zobrazeno 11 zpráv z 11.