Java - prepojenie tried

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod falco_23 29. 9. 2009 20:03

Zdravim, riesim nasledovny problem. Binarny vyhladavaci strom v jazyku Java (Netbeans), mam triedu TStrom a TPrvokStromu. Implementoval som metodu vloz. Problem je vypis udajov. Chcel by som to urobit v GUI, ako zaciatok mi postaci jTextArea kde sa budu vzdy na novy riadok vypisovat udaje o kazdom Prvku. Lenze problem je ze trieda TPrvokStromu, kde vypisujem info o prvku, nepozna metody swingu ako je jTextArea.apend("").
jTextArea sa da pouzit iba v triede swingovej - t.j. GUI.java a ja ten vypis by som chcel implementovany v triede TPrvokStromu.

Neviete niekto ako na to?

Vdaka za radu
falco_23
Junior

Odeslat příspěvekod Vebloud 30. 9. 2009 10:26

Podle mě by to spíš mělobýt tak, že si extendneš TextAreu a předáš jí strom a ona si z něj vytáhne co potřebuje. Případně na naplnění te TextArey použít metodu formu, které předáš strom a on si opět vytáhne co potřebuje.
Strom je v tvém případě čistě datová třída a nemotal bych jí s grafikou.
Žít a nechat žít, ty máš svůj názor, já mám svůj názor, já ti nebudu nutit svůj, nemusím souhlasit s tvým, ale udělám vše, abys ho mohl svobodně vyjádřit.
Vebloud
VIP uživatel
Uživatelský avatar

Odeslat příspěvekod x22 30. 9. 2009 10:56

Asi by som vypisovacej metode v triede TPrvokStromu poslal objekt JTextArea ako parameter.
x22
Junior

Odeslat příspěvekod falco_23 30. 9. 2009 12:44

x22: tento sposob sa mi paci, hlavne preto ze to vyzera jednoducho, len problem je ze neviem ako na to...
Nemohol by si troska pomoct? Trieda GUI obsahuje v sebe jTextArea a podobne komponenty avsak, trieda TPrvokStromu tieto komponenty nepozna vobec... nepomaha ani ziaden include atd :(
falco_23
Junior

Odeslat příspěvekod Nargon 30. 9. 2009 16:26

Hod sem ten tvuj kod. Z toho tveho "zmateneho" popisu v prvnim postu nevim ani o co se snazis. Z toho kodu se to da pochopit o trosicku lepe.
Desktop: Ryzen 7 1800X (3.95GHz, 1.35V), Asus Crosshair VI Hero, 16GB DDR4 Ram (3200MHz), 128GB SSD + 3TB HDD, Nvidia GTX 1080
Notebook: Asus UL50VT 15.6" (SU7300@1.7GHz, 4GB ram, 500GB HDD, Intel GMA 4500MHD + nVidia G210M, dlouha vydrz cca 7+ hod)
Nargon
Moderátor

Odeslat příspěvekod falco_23 30. 9. 2009 16:52

Kód: Vybrat vše
public class TStrom {

    private TPrvokStromu koren;

    public TStrom( ) {         
        koren = null;
        koren.LS = null;
        koren.PS = null;
    }

    public void vloz(TPrvokStromu paPrvok) {       
         if (koren == null) {
                             koren = paPrvok;   
                             
                            }
         else koren.vkladaj(paPrvok);

    };

    public void vypis_preorder(TPrvokStromu pom) {         
            pom.vypis();
            if (pom.LS != null) { vypis_preorder(pom.LS); }
            if (pom.PS != null) { vypis_preorder(pom.PS); }
           
    }


Kód: Vybrat vše
public abstract class TPrvokStromu {

    public  TPrvokStromu LS;
    public  TPrvokStromu PS;

    public TPrvokStromu() {         
        LS = null;
        PS = null;
    }
   
    abstract int porovnaj(TPrvokStromu paPrvok);   

    abstract void vypis();   
   
    abstract void vkladaj(TPrvokStromu paPrvok);       



Kód: Vybrat vše
public class TKniha extends TPrvokStromu {

    private String autor;
    private String nazov;
    private int ISBN;

    @Override       
    int porovnaj(TPrvokStromu paPrvok) {
        TKniha pom;                   
        pom = (TKniha) paPrvok;         

   if (pom.ISBN == this.ISBN) return 0;
        else if (pom.ISBN < this.ISBN) return -1;   //ideme do LS
        else if (pom.ISBN > this.ISBN) return  1;   //ideme do PS
        else return 2;
    }

    @Override
    void vypis() {          //vypise 1 konkretny zaznam o knihe
       
        //TU CHCEM ABY  TO VYPISOVALO DO TEXTAREA !!!!!!!!! resp. do tabulky
       
         }

    @Override         
    void vkladaj(TPrvokStromu paPrvok) {

        int vysl = this.porovnaj(paPrvok);   

        if(vysl == 0) {          //vyhod error
                        }
        else if (vysl == -1) {
                             if(this.LS == null) { this.LS = paPrvok; }
                             else LS.vkladaj(paPrvok);
                             }
        else if(vysl == 1)  {
                            if(this.PS == null) { this.PS = paPrvok;  }
                            else PS.vkladaj(paPrvok);
                            }
    }

    void setAutor(String paAutor) {
        this.autor = paAutor;
    }

    void setNazov(String paNazov) {
        this.nazov = paNazov;
    }

    void setISBN(int paISBN) {
        this.ISBN = paISBN;
    }

    String getAutor() {
        return this.autor;
    }

    String getNazov() {
        return this.nazov;
    }

    int getISBN() {
        return this.ISBN;
    }
}
falco_23
Junior

Odeslat příspěvekod Nargon 30. 9. 2009 21:34

Kód: Vybrat vše
abstract void vypis(JTextArea textArea);

Kód: Vybrat vše
void vypis(JTextArea textArea) {          //vypise 1 konkretny zaznam o knihe
    textArea.apend(this.nazov+"/n");
}

A kdyz budes tu tridu vypisu volat, tak ji musis predat ten objekt v tom GUI do kteryho se to ma vypsat.
Desktop: Ryzen 7 1800X (3.95GHz, 1.35V), Asus Crosshair VI Hero, 16GB DDR4 Ram (3200MHz), 128GB SSD + 3TB HDD, Nvidia GTX 1080
Notebook: Asus UL50VT 15.6" (SU7300@1.7GHz, 4GB ram, 500GB HDD, Intel GMA 4500MHD + nVidia G210M, dlouha vydrz cca 7+ hod)
Nargon
Moderátor

Odeslat příspěvekod Vebloud 2. 10. 2009 10:15

Tohle není dobrý přístup. Většinou se nepředává grafika datům, ale data grafice. Podle vzoru model/view (data/grafika). Až zabrousíš trochu dál do swingu, zjistíš, že je na tomhle modelu založený celý.

Včetně třeba JTree.
Žít a nechat žít, ty máš svůj názor, já mám svůj názor, já ti nebudu nutit svůj, nemusím souhlasit s tvým, ale udělám vše, abys ho mohl svobodně vyjádřit.
Vebloud
VIP uživatel
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků