Trebas da naucis koriscenje modela, procitaj dokumentaciju pa onda analiziraj kod:
Code:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.ListIterator;
import javax.swing.AbstractListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.event.MouseInputAdapter;
public class Sortiranje {
List<String> imena;
JList listaImena;
JButton dugmeSortiraj;
JFrame prozor;
JPopupMenu popupMenu;
JMenuItem itemDodajIme;
JMenuItem itemUkloniIme;
class MyListModel extends AbstractListModel {
static final long serialVersionUID = 1L;
public Object getElementAt(int i) {
return imena.get(i);
}
public void addElement(String ime) {
imena.add(ime);
super.fireIntervalAdded(this, imena.size() - 1, imena.size() - 1);
}
public void removeElement(int index) {
imena.remove(index);
super.fireIntervalRemoved(this, index, index);
}
public int getSize() {
return imena.size();
}
}
void kreirajIPrikaziGUI() {
upisiPodrazumevanaImena();
prozor = new JFrame("JList Demonstracija - Sortiranje");
prozor.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
prozor.setPreferredSize(new Dimension(200, 300));
prozor.setLayout(new BorderLayout());
listaImena = new JList(new MyListModel());
prozor.add(new JScrollPane(listaImena), BorderLayout.CENTER);
dugmeSortiraj = new JButton("Sortiraj");
dugmeSortiraj.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
sortirajImena();
listaImena.repaint();
}
});
prozor.add(dugmeSortiraj, BorderLayout.PAGE_END);
popupMenu = new JPopupMenu();
itemDodajIme = new JMenuItem("Dodaj ime");
popupMenu.add(itemDodajIme);
listaImena.addMouseListener(new MouseInputAdapter(){
@Override
public void mouseReleased(MouseEvent event) {
if (event.isPopupTrigger()) {
popupMenu.show(listaImena, event.getX(), event.getY());
}
}
}
);
itemUkloniIme = new JMenuItem("Ukloni ime");
popupMenu.add(itemUkloniIme);
itemDodajIme.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
String ime = JOptionPane.showInputDialog("Unesi ime");
MyListModel model = (MyListModel)listaImena.getModel();
model.addElement(ime);
}
});
itemUkloniIme.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
int index = listaImena.getSelectedIndex();
if (index == -1) {
JOptionPane.showMessageDialog(null, "Morate selektovati element u listi", "Greska", JOptionPane.ERROR_MESSAGE);
} else {
MyListModel model = (MyListModel)listaImena.getModel();
model.removeElement(index);
}
}
});
prozor.pack();
prozor.setVisible(true);
}
void sortirajImena() {
Collections.sort(imena,
new Comparator<String>() {
public int compare(String osobaA, String osobaB) {
String[] deloviA = osobaA.split(" ");
String[] deloviB = osobaB.split(" ");
if (deloviA[1].compareTo(deloviB[1]) < 0)
return -1;
if (deloviA[1].compareTo(deloviB[1]) > 0)
return 1;
return deloviA[0].compareTo(deloviB[0]);
}
}
);
}
void upisiPodrazumevanaImena() {
imena = new ArrayList<String>();
imena.add("Pera Peric");
imena.add("Ana Anic");
imena.add("Mika Mikic");
imena.add("Pera Mikic");
imena.add("Mika Peric");
imena.add("Mika Anic");
}
void testirajSortiranje() {
upisiPodrazumevanaImena();
sortirajImena();
ispisiImena();
}
private void ispisiImena() {
ListIterator<String> i = imena.listIterator(imena.size());
while (i.hasPrevious())
System.out.println(i.previous());
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
Sortiranje sortiranje = new Sortiranje();
sortiranje.kreirajIPrikaziGUI();
}
});
}
}
Ps.
Koristis desni kilik za dodavanje i uklanjanje elemenata iz liste