Avatar
veselyjan22
Člen
Avatar
veselyjan22:

Zdravim,

řeším takovou srandu ale nevim jak z toho ven.

Jedná se o program, jako Editor matic. Skládá se mi zatím ze 4 tříd a main třídy. Dvě třídy z toho, jsou pouze pro uživateský prostředí, který jsem se rozhodl tvořit pomocí GUI Swing. Nejdříve se zobrazí okno, zadám rozměry matice, kliknu na vytvořit matici a otevře se mi nový okno s tabulkou. A nějaký tlačítka pro kontrolu tabulky a operace co chci s maticí dělat. Až sem nevidím problém.

Tabulku vyplním, nechám zkontrolovat a pokud je vše v pořádku, zaktivní se mi tlačítka pro operace s maticí. Po kliknutí na tlačítko jsem si nechal "zatím" vypisovat jak vypadá ta matice po operaci. Úplně jinak. Problém je ale i v tom, že když si matici nechám vypsat před operací, vypíše se mi úplná hovadina. než kterou jsem zadal do tabulky. Jelikož hodnotu z prvku tabulky přes metodu na objektu DefaultTableMo­del.getValueAt nastavit jako hodnotu prvku matice typu Matice(jedna z mojich tříd) je blbost, protože matice je z dvourozměrného pole double ale ta metoda na default modelu mi vrací objekt.

Nejspíš jsem zvolil dost blbou logiku jak to vyplňovat, ale chci se zeptat - má tohle nějaký řešení? Například existuje něco jako převod typu Object do Double?

Díky, omlouvám se za dlouhý text, ale snažil jsem se to popsat aby tomu šlo porozumět.

public class Event2 implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent f) {
            Matice mat = new Matice(pV);
            for (int i = 0; i < pocetPrvku; i++) {
                for (int j = 0; j < pocetVektoru; j++) {
                    mat.setValueAt(m.getValueAt(i, j), i, j);
                }
            }
            mat.printMatice();
            mat.horni();
            mat.printMatice();

m je DefaultTableModel a pocetPrvku i pocetvektoru jsou atributy třídy

 
Odpovědět 19.11.2014 12:22
Avatar
Matěj Kripner
Redaktor
Avatar
Odpovídá na veselyjan22
Matěj Kripner:

Nevím, jestli jsem tě dobře pochopil, ale předpokládám, že ta "hovadina" je složena z řetězců podobných tomuto:

java.lang.Object@15db9742

To je výstup metody toString() tak, jak ji definuje třída Object.
Pokud je v proměnné typu Object uložen objekt(reference na objekt) typu Double, můžeš ho jednoduše přetypovat:

Double d = (Double)object; // Proměnná object je typu Object, ale je v ní uložena reference na objekt typu Double

To ale podle mě nebude tvůj případ. Nedělám ve Swingu, ale myslím, že třída tabulky bude generická a když generický typ definuješ, bude metoda getValueAt vracet třeba String, s kterým už si poradíš.

Nahoru Odpovědět 19.11.2014 15:50
"We reject kings, presidents and voting. We believe in rough consensus and running code" David Clark
Avatar
veselyjan22
Člen
Avatar
Odpovídá na Matěj Kripner
veselyjan22:

To jsi tu "hovadinu" pochopil velice správně. Tenhle zápis přetypování object typu Object na Double jsem už někde našel, ale ne takhle napsaný. Takže to určitě vezmu na vědomí a pokusím se to nějak využít. Každopádně můžu pořád hodnotu vracenou getValueAt přetypovat na String a z toho pak parsovat double ne? Mám za to, že jsem to už taky zkoušel, ale nejspíš jsem tomu nedal takovou pozornost.

Každopádně díky, to přetypování se pokusím nějak zapasovat a uvidím co to udělá.

 
Nahoru Odpovědět 19.11.2014 16:42
Avatar
Matěj Kripner
Redaktor
Avatar
Odpovídá na veselyjan22
Matěj Kripner:

Jak jsem říkal, do Swingu nevidím a nevím, zda je tady přípustné přetypování. Zkus dokumentaci: https://docs.oracle.com/…leModel.html

Nahoru Odpovědět 19.11.2014 18:15
"We reject kings, presidents and voting. We believe in rough consensus and running code" David Clark
Avatar
veselyjan22
Člen
Avatar
Odpovídá na Matěj Kripner
veselyjan22:

Tak super. Nakonec jsem měl problém úplně někde jinde :`. Nahrával jsem moc informací do vektorů typu Vektor (kde byli souřadnice ArrayList<Double>), tudíž se mi vytvářela matice úplně o jiných rozměrech.

Pak vážně funguje

double d = Double.parseDouble((String)Object);

... bral bych to spíš jako "pseudokód" ... :D

Každopádně děkuji velice, jen jsem to musel vidět zas z jiné strany.

 
Nahoru Odpovědět 24.11.2014 13:56
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.