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

Člen

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