Java – JComboBox podstawy obsługi komponentu

JComboBox to komponent javy z biblioteki swing. W tym, krótkim tutorialu pokażę jak skonstruować odrobinę kodu, aby swobodnie nawigować po pozycjach naszej listy – metoda jaką zaprezentuję jest na tyle uniwersalna, że może być używana w wielu programach.Zapraszam do przestudiowania kodu, oraz własnych eksperymentów. W razie niejasności, proszę pytać w komentarzach – odpowiem na wszystkie wątpliwości.

 


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

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Poprzedni post

KernelUP – Zadbaj o aktualne jądro w systemie

Następny post

Nowy Linux 3.17 tworzony z udziałem programistów z krakowskiej Semihalf

Powiązane posty