Witam,
Mam takie zadanie:
Napisz program wyświetlający listę (obiekt klasy JList „zanurzony” w obiekcie JScrollPane) oraz, poniżej, pole tekstowe ( JTextField).
Użytkownik może wpisać w polu tekstowym:
add słowo: wpisane słowo pojawia się na liście, jeśli go tam nie ma; jeśli zaś jest, to pojawia się stosowny komunikat i słowo to nie jest dodawane;
del słowo: wpisane słowo znika z listy, jeśli tam jest; jeśli zaś go nie ma, to pojawia się stosowny komunikat;
quit: oznacza wyjście z programu.
Użyj własnek klasy dziedziczącej z klasy AbstractListModel odpowiednio implementującej metody abstrakcyjne getElementAt i getSize oraz wyposażonej w metody do dodawania i usuwania elementów listy (należy w nich wywołać fireIntervalAdded i fireIntervalRemoved).
Napisałem coś takiego /
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Main extends AbstractListModel implements ActionListener {
// Zmienne
JFrame okno;
JPanel panel;
JTextArea area;
JTextField field;
JScrollPane scroll;
JList list;
DefaultListModel model;
public void make() {
// Lista
model = new DefaultListModel();
list = new JList(model);
// Area
area = new JTextArea();
scroll = new JScrollPane(list, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
area.setEditable(false);
area.setPreferredSize(new Dimension(250, 200));
// Field
(field = new JTextField()).addActionListener(this);
field.setPreferredSize(new Dimension(250, 20));
// Frame
panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(scroll, BorderLayout.CENTER);
panel.add(field, BorderLayout.SOUTH);
// Panel
okno = new JFrame("LIST");
okno.add(panel);
okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
okno.pack();
okno.setVisible(true);
}
// Zdarzenia
@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source == field) {
if (!field.getText().equals("")) {
if (field.getText().startsWith("add ")) {
model.addElement(field.getText().substring(4));
field.setText(null);
}
if (field.getText().startsWith("del ")) {
model.removeElement(field.getText().substring(4));
field.setText(null);
}
if (field.getText().equals("quit"))
okno.dispose();
else
field.setText(null);
}
}
}
// Konstruktor
public Main() {
make();
}
public static void main(String[] args) {
new Main();
}
@Override
public Object getElementAt(int index) {
return model.get(index);
}
@Override
public int getSize() {
return model.getSize();
}
public void addElement(Object element) {
model.addElement(element);
fireIntervalAdded(this, model.getSize(), model.getSize());
}
}
I teraz pytanie :)
Co mają zrobić te polecenia fireIntervalAdded i fireIntervalRemoved (Patrzyłem w dokumentacji ale nie za bardzo rozumiem)?? Według mnie to jest nie potrzebne... metoda addElement jest poprawna(Aktualnie jeszcze nie jest wykorzystywana oczywiście)?
Proszę o pomoc ...
PS.
Mile widziane podpowiedzi do poprawienia mojego stylu pisania kodu ... Jestem początkującym programistą i będę wdzięczny za opinie bardziej doświadczonych:D