import java.awt.Container;
import java.awt.event.*;
import javax.swing.*;
public class OknoListy extends JFrame implements ActionListener {
JButton next,prev;
JComboBox lista;
String [] pozListy = {“Pozycja 1″,”Pozycja 2″,”Pozycja 3″,”Pozycja 4″,”Pozycja 5”};
public OknoListy()
{
super(“Okno listy”);
setSize(400,200);
setVisible(true);
Container c = new Container();
c = getContentPane();
c.setLayout(null);
lista = new JComboBox(pozListy);
lista.setBounds(10,10,300,20);
c.add(lista);
next = new JButton(“>>”);
next.setBounds(160,30,150,20);
next.addActionListener(this);
c.add(next);
prev = new JButton(“<<“);
prev.setBounds(10,30,150,20);
prev.addActionListener(this);
c.add(prev);
repaint();
}
W tym miejscu kończymy inicjowanie komponentów graficznych okna aplikacji a zaczynamy pisać nasze metody.
public void nastPoz()
{
try {
int lpl = lista.getItemCount(); // Liczba wszystkich pozycji listy
if (lista.getSelectedIndex() == lpl-1)
{
lista.setSelectedIndex(0);
}
else{
lista.setSelectedIndex(lista.getSelectedIndex()+1);
}
} catch (Exception e) {
e.printStackTrace(); // Obsługa wyjątku – pusta lista
}
}
public void poprzPoz()
{
try {
int lpl = lista.getItemCount(); // Liczba wszystkich pozycji listy
if(lista.getSelectedIndex() == 0)
{
lista.setSelectedIndex(lpl-1);
}
else{
lista.setSelectedIndex(lista.getSelectedIndex()-1);
}
} catch (Exception e) {
e.printStackTrace(); // Obsługa wyjątku – pusta lista
}
}
public void actionPerformed(ActionEvent e) // Słuchacz przycisków
{
if(e.getSource() == next)
{
nastPoz();
}
if(e.getSource() == prev)
{
poprzPoz();
}
}
public static void main(String[] args) {
new OknoListy(); // Metoda main – tutaj startuje nasza apliakcja
}
}
Wydaje mi się, że kod samych metod nie wymaga komentarza, ponieważ nie jest zbyt skomplikowany?!
Efekt wizualny:
JComboBox – sortowanie.
Teraz chcę zaprezentować wam jak można sobie poradzić z posortowaniem listy JComboBox w kolejności rosnącej i malejącej. Na początek jednak uwaga – sama klasa JComboBox nie udostępnia żadnej “magicznej” i gotowej metody aby można było ją podpiąć “out of the box”. Swoją drogą szkoda 🙂
Pobawmy się troszkę listą z poprzedniego przykładu i pomieszajmy kolejność pozycji w liście np:
String [] pozListy = {“Pozycja 2″,”Pozycja 1″,”Pozycja 4″,”Pozycja 3″,”Pozycja 5”};
Pozamienialiśmy kolejność pozycji w liście, hmm przydałoby się móc ją posortować?! Dodamy teraz dwa przyciski i nazwiemy je Sort A i Sort D.
Aby móc sortować elementy naszej listy musimy posortować je najpierw w tablicy “pozListy”. Służą do tego odpowiednie metody klasy Arrays. Chodzi konkretnie o metodę “sort”, która jako parametr/y przyjmuje tablicę elementów i np: obiekt klasy Comparator. Dzięki powołaniu do życia obiektu właśnie klasy Comparator, będziemy mogli przekazać go jako parametr z wywołaniem metody “reverseOrder”, metodzie “sort”. Jak to zrobić? Pokazuję obie metody poniżej.
Najpierw sortowanie rosnąco:
public void sortA()
{
Arrays.sort(pozListy); // sortowanie listy elementów rosnąco
int liczbapoz = pozListy.length;
lista.removeAllItems(); // usunięcie wszystkich pozycji z listy
for (int i = 0; i < liczbapoz;i++) // Dodanie w pętli posortowanych pozycji do listy
{
lista.addItem(pozListy[i]);
}
}
Teraz sortowanie malejąco:
public void sortD()
{
Comparator por = Collections.reverseOrder(); // Porównywacz metoda odwrotnej kolejności pozycji w liście
Arrays.sort(pozListy,por);
int liczbapoz = pozListy.length;
lista.removeAllItems(); // usunięcie wszystkich pozycji z listy
for (int i = 0; i < liczbapoz;i++) // Dodanie w pętli posortowanych pozycji do listy
{
lista.addItem(pozListy[i]);
}
}
Podepnijmy jeszcze nasze metody pod przyciski w actionPerformed dla ActionListener.
if(e.getSource() == sortasc)
{
sortA();
}
if(e.getSource() == sortdesc)
{
sortD();
}
Teraz już nasza lista może być sortowana w obie strony. Jak to działa możecie sprawdzić sami uruchamiając kod aplikacji w swoim edytorze.
Jeżeli ktoś chce gotowy kod calej klasy to proszę pisać na: motyw71@gmail.com