ArrayList-ті тікелей Jlist-ге неге қосуға болмайды?

Мен ArrayList-ді Jlist-ге қосуға тырысамын, бірақ түсінуім үшін жалғыз әдіс келесідей кодты жазу болып табылады:

ArrayList labels = new ArrayList();
JList jlist = new JList(labels.toArray());

Мені шатастыратын болсақ, неге мен тек ArrayList-ты Jlist-ге ғана қосуға бола алмаймын?

ArrayList labels = new ArrayList();
JList jlist = new JList(labels);

алдын-ала рақмет.

1
қосылды автор Stephan, көзі
Егер сіз бұл туралы шынымен алаңдасаңыз, ол ListModel құрыңыз, ол List , ол негізгі деректермен қорғалған
қосылды автор MadProgrammer, көзі
«Мені шатастыратын болсақ, неге мен жай ғана Jlist-ге ArrayList-ты қосуға бола алмаймын:» --- Өйткені біз кодты жасай алмаймыз және ол жұмыс істей алатынына үміттенеміз. API сіздерге конструкторлар мен әдістердің бар екендігін дәлелдейді. Оны неғұрлым көп пайдалансаңыз, соғұрлым ол пайдалы болады.
қосылды автор Hovercraft Full Of Eels, көзі
«Мені шатастыратын болсақ, неге мен жай ғана Jlist-ге ArrayList-ты қосуға бола алмаймын:» --- Өйткені біз кодты жасай алмаймыз және ол жұмыс істей алатынына үміттенеміз. API сіздерге конструкторлар мен әдістердің бар екендігін дәлелдейді. Оны неғұрлым көп пайдалансаңыз, соғұрлым ол пайдалы болады.
қосылды автор Hovercraft Full Of Eels, көзі

7 жауаптар

«Көмекші» конструкторларын енгізу қарапайым деректер құрылымдарымен JList пайдалануды жеңілдетуге арналған.

JList (және көптеген Swing компоненттері) іс жүзінде нақты деректерді көрініске жеткізетін үлгілерде қолдануға арналған.

Бастапқы дизайн, Swing негізгі кітапханаға (JDK 1.3 нұсқасына дейін) енгізілгенге дейін және бұрынғы жинақтар API енгізілгенге дейін кетеді, сондықтан түпнұсқалық әзірлеушілер үшін қол жетімді List жоқ оларды (демек, Vector ) қосу.

Кітапханаларды жаңартуға ешкімнің қолы жетпегені (ішінара, бастапқы конструкторлар енгізілмеген болуы мүмкін, бірақ мен сол кездесуде болмағандықтан);

Деректер көзі ретінде List қолданатын өзіңіздің үлгіні құру жақсы/қарапайым шешім болады.

Мысалға...

public class MyListModel extends AbstractListModel {

    private List people;

    public MyListModel(List people) {
        this.people = people;
    }

    @Override
    public int getSize() {
        return people.size();
    }

    @Override
    public T getElementAt(int index) {
        return people.get(index);
    }
}

Одан кейін сіз оны тек қана JList -ге қоя аласыз.

JList myList = new JList(new MyListModel(listOfMyObjets));
6
қосылды
+1 жақсы шешім
қосылды автор nachokk, көзі

«Көмекші» конструкторларын енгізу қарапайым деректер құрылымдарымен JList пайдалануды жеңілдетуге арналған.

JList (және көптеген Swing компоненттері) іс жүзінде нақты деректерді көрініске жеткізетін үлгілерде қолдануға арналған.

Бастапқы дизайн, Swing негізгі кітапханаға (JDK 1.3 нұсқасына дейін) енгізілгенге дейін және бұрынғы жинақтар API енгізілгенге дейін кетеді, сондықтан түпнұсқалық әзірлеушілер үшін қол жетімді List жоқ оларды (демек, Vector ) қосу.

Кітапханаларды жаңартуға ешкімнің қолы жетпегені (ішінара, бастапқы конструкторлар енгізілмеген болуы мүмкін, бірақ мен сол кездесуде болмағандықтан);

Деректер көзі ретінде List қолданатын өзіңіздің үлгіні құру жақсы/қарапайым шешім болады.

Мысалға...

public class MyListModel extends AbstractListModel {

    private List people;

    public MyListModel(List people) {
        this.people = people;
    }

    @Override
    public int getSize() {
        return people.size();
    }

    @Override
    public T getElementAt(int index) {
        return people.get(index);
    }
}

Одан кейін сіз оны тек қана JList -ге қоя аласыз.

JList myList = new JList(new MyListModel(listOfMyObjets));
6
қосылды
+1 жақсы шешім
қосылды автор nachokk, көзі

JList has no constructor that accepts a List. The first example works as it uses the constructor JList(Object[]).

Familiarize yourself with the javadoc

3
қосылды

JList құрамында ArrayList (немесе List ) қабылдайтын конструктор болмағандықтан. Ол тек массивді, ListModel немесе Vector қабылдай алады. құжаттаманы қараңыз.

ArrayList - массив емес. ArrayList дегенді алаптың қалайтын әдісіне өткізе алмайсыз.

2
қосылды

JList құрамында ArrayList (немесе List ) қабылдайтын конструктор болмағандықтан. Ол тек массивді, ListModel немесе Vector қабылдай алады. құжаттаманы қараңыз.

ArrayList - массив емес. ArrayList дегенді алаптың қалайтын әдісіне өткізе алмайсыз.

2
қосылды

Бұл қарапайым. JList конструкторлары ArrayList күтеді

JList()
Constructs a JList with an empty, read-only, model.
JList(E[] listData)
Constructs a JList that displays the elements in the specified array.
JList(ListModel dataModel)
Constructs a JList that displays elements from the specified, non-null, model.
JList(Vector<? extends E> listData)
Constructs a JList that displays the elements in the specified Vector.
2
қосылды

Бұл қарапайым. JList конструкторлары ArrayList күтеді

JList()
Constructs a JList with an empty, read-only, model.
JList(E[] listData)
Constructs a JList that displays the elements in the specified array.
JList(ListModel dataModel)
Constructs a JList that displays elements from the specified, non-null, model.
JList(Vector<? extends E> listData)
Constructs a JList that displays the elements in the specified Vector.
2
қосылды