Forum zamknięte. Zapraszamy do grupy na Facebooku
Odpowiedz 
 
Ocena wątku:
  • 1 Głosów - 5 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
JList - podstawy
11-12-2012, 03:44 PM
Post: #1
JList - podstawy
Cześć,
próbuję napisać prosty programik wyświetlający zawartość bazy danych (czyli tak naprawdę Vectora) w komponencie JList, oraz umożliwiający dokonanie podstawowych operacji - dodaj,usuń edytuj. Całość staram się tworzyć z zastosowaniem modelu mvc.

Mój problem na dziś, to jak wyświetlić dane w kontrolce JList.

Trochę kodu:

Model i w nim dwie klasy:
- Klasa Osoba.
- Baza osób
Kod:
public class Person{
    public int id;
    public String name;
    public String surname;
}

public class PeopleDB{
    Vector <Person> peopleList=new Vector<Person>()
    //i tutaj metody dodaj, usun, edytuj

    public Vector<Person> getPeopleList() {
        return peopleList;
    }

}

W widoku znajduje się widok głównego okienka, 3 przyciski i JList, oraz gettery i settery komponentów, tak abym mógł się od nich odnosić w kontrolerze.
Kod:
public class MainWindow {
    JFrame mainFrame;
    JPanel mainPanel;
    JButton btnAdd,btnDelete,btnEdit;
    JList <String[]>listBox;
    
    public MainWindow(){
        mainFrame=new JFrame("Zawodnicy");
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mainFrame.setVisible(true);
        mainFrame.setBounds(100, 100, 500, 300);        
        
        mainPanel=new JPanel();
        mainPanel.setLayout(new GridLayout(2,3,20,20));
        
        btnAdd=new JButton("Dodaj");
        btnDelete=new JButton("Usuń");
        btnEdit=new JButton("Edytuj");
        listBox=new JList();
        
        mainPanel.add(btnAdd);
        mainPanel.add(btnDelete);
        mainPanel.add(btnEdit);        
        mainPanel.add(listBox);
        
        mainFrame.add(mainPanel);    
    }
//plus gettery i settery każdego komponentu
}

W kontrolerze staram się spiąć to wszystko w całość. Kontroler implementuje interfejs ActionListener i dzięki temu mogę zrealizować obsługę przycisków z widoku.
Kod:
public class MainWindowControler implements ActionListener{
    
    PeopleDB peopleDB;
    MainWindow mainWindow;

    public MainWindowControler(){    
        mainWindow=new MainWindow();
        
        mainWindow.getBtnAdd().addActionListener(this);
        mainWindow.getBtnDelete().addActionListener(this);
        mainWindow.getBtnEdit().addActionListener(this);
    
        /*tutaj powinienem określić zawartość mojego komponentu JList - mainWindow.getListBox(); */        
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        Object source=e.getSource();
        if(source==mainWindow.getBtnAdd()){
            peopleDB.add("imie","nazwisko");
        }                
        }
        if(source==mainWindow.getBtnDelete()){
            //usun
        }
    }    
}

No i teraz właśnie - jak wyświetlić w JList, imiona i nazwiska z tej mojej bazy danych.

Próbowałem w kontrolerze wstawić
Kod:
mainWindow.getListBox().setListData(PeopleDB.getPeopleList());
ale to wyświetla warning
Cytat:The method setListData(Vector) belongs to the raw type JList. References to generic type JList<E> should be parameterized

W c# mogłem po prostu na kontrolce listbox wywołać metodę addItem() i dowolnie dodawać elementy. Tutaj z tego co zrozumiałem, trzeba wszystkie itemy przekazać od razu i aktualizować je w całości jeśli się coś zmieni. Dlatego właśnie możemy w konstruktorze JList przekazać tablicę lub vector.
Myślę więc, że mógłbym napisać w mojej klasie reprezentującej baze danych, metodę ToArray, która zwracałaby wszystkie elementy w tablicy. Nie wiem jednak jak przekazać je do JList nie przez konstruktor, oraz jak później rozwiązać kwestię aktualizacji danych.

Jeśli coś jest niejasne to postaram się doprecyzować.
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
11-13-2012, 02:20 PM
Post: #2
RE: JList - podstawy
Już sobie poradziłem.

W View zadeklarowałem JList w taki spósób:
Kod:
    JList <Object>listBox=new JList<Object>();

    public JList<Object> getListBox() {
        return listBox;
    }

    public void setListBox(JList<Object> listBox) {
        this.listBox = listBox;
    }

A w kontrolerze wywołuję:
Kod:
mainWindow.getListBox().setListData(peopleDB.toArray());

Metodę to array zrobiłem w następujący sposób:
Kod:
    public String[]toArray(){
        String[] array=new String[peopleList.size()];
        
        for(int i=0;i<peopleList.size();i++){
            array[i]=peopleList.get(i).name+" "+peopleList.get(i).surname;
        }
                
        return array;
    }
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
Odpowiedz 


Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości