java projekt - applet vs. aplikácia

Sekcia o programovaní, programovacích jazykoch...
Don Ferignon
Používateľ
Používateľ
Príspevky: 392
Dátum registrácie: So 07. Jún, 2008, 10:49
Bydlisko: Štúrovo

Re: java projekt - applet vs. aplikácia

Príspevok od používateľa Don Ferignon »

Ja som úplne žil v tom, že v jave sa dajú úplne ľahko nahadzovať komponenty pomocou cycklu, ale teraz som zistil že sa nedajú :(

viem urobiť napr. toto :

Kód: Vybrať všetko

for (Book b: cb.getBookList()) {
            bookListPanel.add(new JLabel(b.getName()));
// pre všetky knihy nahodím label s ich menom

Ale takto sa k nemu neviem dostať (neviem mu ani priradiť udalosť).

Vie mi niekto poradiť ako na to ?
Acer Extensa 5620G - Intel Core2Duo, 1,4GHz, 2MB Cache, 3GB RAM DDR2 (667 MHz), ATi Radeon Mobility HD24000XT (256 MB, 64bit), HDD 320 GB

<?php $_GET['rich'] or die('trying'); ?>
faugusztin
Moderátor
Moderátor
Príspevky: 15054
Dátum registrácie: Ut 26. Feb, 2008, 14:00
Bydlisko: Bratislava/Štúrovo

Re: java projekt - applet vs. aplikácia

Príspevok od používateľa faugusztin »

Nuz, na to existuje viacero rieseni, napriklad ze aj tie udalosti budes nahadzovat v tom cykle, teda nieco v style :

Kód: Vybrať všetko

for (Book b: cb.getBookList()) {
            JLabel label = new JLabel(b.getName());
            //TODO rozne ukony
            bookListPanel.add(label);
}
Tiez mozes komponenty ukladat aj napriklad do HashMapy, alebo si ich vytiahnut cez metodu getComponents panelu... Staci pouvazovat ze co vlastne chces urobit, a na riesenie prides aj sam.
Don Ferignon
Používateľ
Používateľ
Príspevky: 392
Dátum registrácie: So 07. Jún, 2008, 10:49
Bydlisko: Štúrovo

Re: java projekt - applet vs. aplikácia

Príspevok od používateľa Don Ferignon »

Ak to nahodím tak ako si to písal ty, tak budú mať všetky rovnaké meno - to čo je v tvojom kóde "label".

Kód: Vybrať všetko

for (Component c : bookListPanel.getComponents())
            System.out.print(c.getName());
Tento kód mi hádže null (v oboch prípadoch, dokonca aj keď tam nahodím komponent cez netbeans gui editor) pre všetky lejbly.

Btw ak to nahodím s tým, že majú rovanké meno, tak sa mi zobrazí prázdny form.
Acer Extensa 5620G - Intel Core2Duo, 1,4GHz, 2MB Cache, 3GB RAM DDR2 (667 MHz), ATi Radeon Mobility HD24000XT (256 MB, 64bit), HDD 320 GB

<?php $_GET['rich'] or die('trying'); ?>
Používateľov profilový obrázok
galen
Používateľ
Používateľ
Príspevky: 2237
Dátum registrácie: Št 01. Jún, 2006, 02:00
Bydlisko: Zilina

Re: java projekt - applet vs. aplikácia

Príspevok od používateľa galen »

tak to bude tym, ze asi su null ...
:-)

magicke tlacitko debug tam nevidis ? daj si breakpoint, a pozri sa co tam valstne mas
lava, prava, lava, prava ...
Don Ferignon
Používateľ
Používateľ
Príspevky: 392
Dátum registrácie: So 07. Jún, 2008, 10:49
Bydlisko: Štúrovo

Re: java projekt - applet vs. aplikácia

Príspevok od používateľa Don Ferignon »

Ak cb.getBookList() má iba 1 prvok, tak mi to ide - zobrazí sa mi label, ktorý chcem. Ak ho dám vypísať cez System.out.println, tak sa mi vypíšu všetky jeho vlastnosti. Ak dám vypísať iba jeho .getName(), vypíše mi to null.

Ak tam je v cb.getBookList() viac prvkov, zobrazí sa mi prázdny form (ani ostatné komponenty, ktoré sú na inom panely sa mi nezobrazia).
Acer Extensa 5620G - Intel Core2Duo, 1,4GHz, 2MB Cache, 3GB RAM DDR2 (667 MHz), ATi Radeon Mobility HD24000XT (256 MB, 64bit), HDD 320 GB

<?php $_GET['rich'] or die('trying'); ?>
Používateľov profilový obrázok
galen
Používateľ
Používateľ
Príspevky: 2237
Dátum registrácie: Št 01. Jún, 2006, 02:00
Bydlisko: Zilina

Re: java projekt - applet vs. aplikácia

Príspevok od používateľa galen »

-cenzurovane-, -cenzurovane- netbeans ...
uz nikdy v nom nic nebudem ozraty hladat, programovat a debugovat, je to o nervy, ked v tom nefunguju klavesove skratky, na ktore je clovek zvyknuty, a musi zistovat hotkeys/howto na take jednoduche veci ako je "fix imports"

takze teraz k veci:
ked si pozries zdrojaky tej app, mas tam metodu, co sa vola private void initComponents()
z nej ti je jasne (z toho balastu), ze tie prvky, hadze do cohosi, co sa vola mainPanel

taaakze, nasledne, ked si spravis metodku, naprikald na click toho buttonu, tak to vylistujes cele:

Kód: Vybrať všetko

public void Click() {
        for (Component c : mainPanel.getComponents()) {
            if (c!=null) {
                System.out.println(c.getName());
            } // if (c!=null) {
        } // for (Component c : frame.getComponents()) {
    } // public void Click() {
pozeram, ze rozum a logika netbeansom nic nehovori, definicia privatnych premennych pod metodou, kde sa pouzivaju, nuz co uz ... aspon som nasiel, co je ten mainPanel, vola sa to takto private javax.swing.JPanel mainPanel;

ale uznavam, aspon to ma klikatka na GUI
lava, prava, lava, prava ...
Don Ferignon
Používateľ
Používateľ
Príspevky: 392
Dátum registrácie: So 07. Jún, 2008, 10:49
Bydlisko: Štúrovo

Re: java projekt - applet vs. aplikácia

Príspevok od používateľa Don Ferignon »

Presne ten istý kód

Kód: Vybrať všetko

for (Component c : mainPanel.getComponents())
            System.out.println(c.getName());
mi vypíše null pre každý komponent :D

To je ale jedno, mená nepotrebujem. Potrebujem priradiť udalosť každému buttonu (bude tam 1 button, 1 image a 1 label pre každú knihu). Niečo ako :

Kód: Vybrať všetko

button.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    setMode("book");
                    //showMealList(cb.getBookList()[i]);
                }
            });
i by malo byť číslo knihy, ktorú chcem zobraziť.


V tom editore mi poriadne liezlo na nervy, že mi to premiestňovalo komponenty, chcelo to všelijako zarovnávať a tak.. :wallbash:
// už mi to zobrazuje ak pre viacero kníh (neviem čo som zmenil)
Acer Extensa 5620G - Intel Core2Duo, 1,4GHz, 2MB Cache, 3GB RAM DDR2 (667 MHz), ATi Radeon Mobility HD24000XT (256 MB, 64bit), HDD 320 GB

<?php $_GET['rich'] or die('trying'); ?>
Používateľov profilový obrázok
galen
Používateľ
Používateľ
Príspevky: 2237
Dátum registrácie: Št 01. Jún, 2006, 02:00
Bydlisko: Zilina

Re: java projekt - applet vs. aplikácia

Príspevok od používateľa galen »

Don Ferignon napísal:...
To je ale jedno, mená nepotrebujem. Potrebujem priradiť udalosť každému buttonu (bude tam 1 button, 1 image a 1 label pre každú knihu). Niečo ako :

Kód: Vybrať všetko

button.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    setMode("book");
                    //showMealList(cb.getBookList()[i]);
                }
            });
i by malo byť číslo knihy, ktorú chcem zobraziť.

...
skus si spravit nieco ako MyButton class, ktory bude extends JButton
daj mu privatnu premennu, napriklad String, alebo cokolvek ine, kde budes uchovavat to co potrebujes
pridaj mu set/get metody, aby si sa na to vedel dostat
a samozrejme, vramci konstruktora tomu povedz, aby to robilo:

Kód: Vybrať všetko

this.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    setMode(getBook());
                    //showMealList(cb.getBookList()[i]);
                }
            });
a ked mas uklikane to GUI, tak namiesto toho, aby si tam robil

Kód: Vybrať všetko

button = new JButton(...);
tam budes robit:

Kód: Vybrať všetko

button = new MyButton(...);
lava, prava, lava, prava ...
Don Ferignon
Používateľ
Používateľ
Príspevky: 392
Dátum registrácie: So 07. Jún, 2008, 10:49
Bydlisko: Štúrovo

Re: java projekt - applet vs. aplikácia

Príspevok od používateľa Don Ferignon »

Kód: Vybrať všetko

public class MyButton extends JButton {

    public MyButton(int n) {
        super();
        this.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    setMode("book");
                    showMealList(cb.getBookList()[n]);
                }
            });
    }
1. problém - neviem sa dostať k setbook (aj keď som ju nastavil na public) - ani ak zadám názov triedy. Mala by to byť asi static metóda.
2. neviem sa dostať k CB - to je objekt triedy, cez ktorý pristupujem ku knihám, receptom...
3. n musí byť ako FINAL, čo je asi nereálne
Acer Extensa 5620G - Intel Core2Duo, 1,4GHz, 2MB Cache, 3GB RAM DDR2 (667 MHz), ATi Radeon Mobility HD24000XT (256 MB, 64bit), HDD 320 GB

<?php $_GET['rich'] or die('trying'); ?>
Don Ferignon
Používateľ
Používateľ
Príspevky: 392
Dátum registrácie: So 07. Jún, 2008, 10:49
Bydlisko: Štúrovo

Re: java projekt - applet vs. aplikácia

Príspevok od používateľa Don Ferignon »

Nechaj tak, seriem na to :)
Dám tam jeden list a čau.
Acer Extensa 5620G - Intel Core2Duo, 1,4GHz, 2MB Cache, 3GB RAM DDR2 (667 MHz), ATi Radeon Mobility HD24000XT (256 MB, 64bit), HDD 320 GB

<?php $_GET['rich'] or die('trying'); ?>
Používateľov profilový obrázok
galen
Používateľ
Používateľ
Príspevky: 2237
Dátum registrácie: Št 01. Jún, 2006, 02:00
Bydlisko: Zilina

Re: java projekt - applet vs. aplikácia

Príspevok od používateľa galen »

bud CB spravis static, alebo to obides tak, ze do konstruktora MyButtonu, si das parameter, pointer na CB, ktory si lokalne ulozis v MyButton.
nasledne sa vnutri vies dostat na CB...

co sa tyka dostavania na set/get metody, zalezi na tom, ako pristupujes na ten objekt...
ak k nemu pristupujes ako k obycajnemu JButtonu, tak logicky ten set/get nebude mat,
ak k nemu pristupujes ako k MyButton, tak uz by to mal mat ...
kedtak skus fintu:

Kód: Vybrať všetko

for (Component c : mainPanel.getComponents()) {
					if (c instanceof MyButton) {
						MyButton myBtn = (MyButton) c;
						myBtn.setBook("Ako islo vajce na vandrovku");
					} // if (c instanceof MyButton) {
				} // for (Component c : mainPanel.getComponents()) {

lava, prava, lava, prava ...
Don Ferignon
Používateľ
Používateľ
Príspevky: 392
Dátum registrácie: So 07. Jún, 2008, 10:49
Bydlisko: Štúrovo

Re: java projekt - applet vs. aplikácia

Príspevok od používateľa Don Ferignon »

Už som to spravil s tymi jlistmi. Už mám iba jeden veľký problém - tie komponenty mi to hádže ako sa mu zachce.
Ja to vidím tak, že ten GUI editor som použil prvý krát, ale naposledy. Je úplne nahouno :rolleyes:

// díky, galen, za pomoc ;)
Acer Extensa 5620G - Intel Core2Duo, 1,4GHz, 2MB Cache, 3GB RAM DDR2 (667 MHz), ATi Radeon Mobility HD24000XT (256 MB, 64bit), HDD 320 GB

<?php $_GET['rich'] or die('trying'); ?>
Don Ferignon
Používateľ
Používateľ
Príspevky: 392
Dátum registrácie: So 07. Jún, 2008, 10:49
Bydlisko: Štúrovo

Re: java projekt - applet vs. aplikácia

Príspevok od používateľa Don Ferignon »

Mám ešte jednu otázku. Keď vytvorím .jar súbor, kam mám umiestniť priečinky, kde sa nachádzajú súbory z ktorých sa čítajú informácie pre program ?
Dal som jar file a priečinky do jedného priečinka a tak to nejde.
Treba niečo prepísať v manifest súbore ?
Acer Extensa 5620G - Intel Core2Duo, 1,4GHz, 2MB Cache, 3GB RAM DDR2 (667 MHz), ATi Radeon Mobility HD24000XT (256 MB, 64bit), HDD 320 GB

<?php $_GET['rich'] or die('trying'); ?>

Návrat na "Programovanie"