Portál AbcLinuxu, 12. května 2025 01:38

Dotaz: Java JList Netbeans

19.7.2009 15:37 Frodo
Java JList Netbeans
Přečteno: 825×
Odpovědět | Admin

Pokud v Netbeans umistim na JForm komponentu JList, vypada vygenerovany kod teto akce takto:

jList1.setModel(new javax.swing.AbstractListModel() {
            String[] strings = { "Item1", "Item2", "Item3", "Item4" };
            public int getSize() { return strings.length; }
            public Object getElementAt(int i) { return strings[i]; }
        });

Problem je, ze do takto vytvoreneho seznamu jList1 nemohu pridavat nove prvky. O tomto problemu se treba pise hned na zacatku tady: http://www.seasite.niu.edu/cs580java/JList_Basics.htm a hned za tim je popsany postup jak vytvorit seznam pomoci DefaultListModel tak aby pridavat prvky slo.

 

Proto jsem se chtel zeptat, zda nekdo nevi, jak Netbeans rict, aby jList vytvarel "inteligentneji" tim druhym zpusobem, abych pak mohl rovnou a lehce do seznamu pripdavat nove prvky.

 

Vim, ze resenim by bylo ten generovany kod pokazde prepisovat, ale to je v pripade vice seznamu dost otrava...

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

19.7.2009 17:09 ZAH | skóre: 43 | blog: ZAH
Rozbalit Rozbalit vše Re: Java JList Netbeans
Odpovědět | | Sbalit | Link | Blokovat | Admin
Odděl model od Componenty.
import java.util.ArrayList;

import javax.swing.AbstractListModel;

public class TestModel extends AbstractListModel {

    private ArrayList<> data; 
    
    protected ArrayList<String> getData() {
        if (data == null)
            data = new ArrayList<String>();
        return data;
    }

    @Override
    public Object getElementAt(int arg0) {       
        return getData().get(arg0);
    }

    @Override
    public int getSize() {        
        return getData().size();
    }
}
19.7.2009 18:52 Frodo
Rozbalit Rozbalit vše Re: Java JList Netbeans

Nejak mi unika, jak mi tento kod pomuze k tomu, abych mohl do seznamu dodatecne pridavat data...

19.7.2009 18:39 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Java JList Netbeans
Odpovědět | | Sbalit | Link | Blokovat | Admin
Aby měl JList nějaký smysl, musíte mu vždy předat nějaký model. A NetBeansy nemohou vědět, jaký model si přejete. Standardně vám vytvoří model, který umožňuje zobrazovat pevně daný seznam Stringů, který můžete měnit v době návrhu. Pokud chcete nějaký jiný model, musíte jej v grafickém návrháři změnit.

Také by bylo dobré nastudovat si něco o Swingu a konceptu MVC, protože Swing je postaven na oddělení grafických komponent, modelu (dat) a řízení aplikace, tj. neměl byste se na to dívat tak, že přidáváte další položky do nějaké komponenty JList, ale měl byste přidávat položky do nějakého datového seznamu (do modelu), a JList pouze reprezentuje tento model uživateli (a může ho klidně reprezentovat úplně něco jiného, třeba odrážkový seznam v HTML).
19.7.2009 18:50 Frodo
Rozbalit Rozbalit vše Re: Java JList Netbeans

 

Aby měl JList nějaký smysl, musíte mu vždy předat nějaký model. A NetBeansy nemohou vědět, jaký model si přejete. Standardně vám vytvoří model, který umožňuje zobrazovat pevně daný seznam Stringů, který můžete měnit v době návrhu. Pokud chcete nějaký jiný model, musíte jej v grafickém návrháři změnit.

Ano, ja chci jiny model, ale prave v tom grafickem navrhari nemuzu nikde najit, kde toho dosahnout. Jsem slepy nebo to tam neni? Mam netbeans 6.7.

 

Také by bylo dobré nastudovat si něco o Swingu a konceptu MVC, protože Swing je postaven na oddělení grafických komponent, modelu (dat) a řízení aplikace, tj. neměl byste se na to dívat tak, že přidáváte další položky do nějaké komponenty JList, ale měl byste přidávat položky do nějakého datového seznamu (do modelu), a JList pouze reprezentuje tento model uživateli (a může ho klidně reprezentovat úplně něco jiného, třeba odrážkový seznam v HTML).

O MVC jiste potuchy mam, pouze jsem se vyjadroval zjednodusene - tedy nepresne.

 

19.7.2009 19:06 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Java JList Netbeans
Ano, ja chci jiny model, ale prave v tom grafickem navrhari nemuzu nikde najit, kde toho dosahnout. Jsem slepy nebo to tam neni? Mam netbeans 6.7.
Ve vlastnostech (properties) je vlastnost (property) model. Ta má specializovaný editor, který vám umožní editovat ten model vytvořený NetBeansy, nastavit model jako vlastnost z jiné komponenty, nebo zadat vlastní kód, který model nastavíte. Případně pokud používat tu bindovací knihovnu, kterou používají NetBeansy, můžete model nastavit přes binding.
20.7.2009 09:32 Frodo
Rozbalit Rozbalit vše Re: Java JList Netbeans

Dobre, tak jsem ten automaticky generovany v metode private void initComponents() kod upravil pres ten editor z:

jList1 = new javax.swing.JList();

jList1.setModel(new javax.swing.AbstractListModel() {
    String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
    public int getSize() { return strings.length; }
    public Object getElementAt(int i) { return strings[i]; }
});

jScrollPane2.setViewportView(jList2);

na

DefaultListModel m = new DefaultListModel();
m.addElement("Prvek 1");
m.addElement("Prvek 2");
m.addElement("Prvek 3");
jList1 = new javax.swing.JList();

jList1.setModel(m);

jScrollPane1.setViewportView(jList1);

Pres model m tedy nyni mohu pridavat dalsi prvky, avsak k teto promenne se zvenci (naprihlad z ActionPerformed tlacitka pro pridani noveho prvku do seznamu) nemohu dostat. Jak to prosim resit?

20.7.2009 11:07 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Java JList Netbeans
Pres model m tedy nyni mohu pridavat dalsi prvky, avsak k teto promenne se zvenci (naprihlad z ActionPerformed tlacitka pro pridani noveho prvku do seznamu) nemohu dostat. Jak to prosim resit?
Tak, že si ve formuláři vytvoříte field typu ListModel (nebo jeho potomka) a do modelu JListu nastavíte jako model ten.

Pak bych také doporučil přečíst si nějakou základní učebnici Javy a OOP, třeba Učebnice jazyka Java od p. Herouta. Jedno z pokračování se pak zabývá i GUI: Java - grafické uživatelské prostředí a čeština – sice se zabývá především AWT, ale základní principy jsou stejné i pro Swing.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.