JComboBox - automatyczna zmiana zawratości, po wybraniu pozycji z innego JComboBox

0

Witam!
Mam taki problem.

Chciałbym, aby zawartość jednego ComboBox'a, zmieniała się wraz z wyborem odpowiedniej pozycji drugiego ComboBoxa. Dokładnie chodzi mi tutaj o to. W jednej liście mam listę województw, a w drugiej listę miast. Chodzi o to, aby lista miast dla każdego z województw (po wybraniu) była inna. Oto część mojego kodu:

listawojewodztw.addItem("Śląskie");
listawojewodztw.addItem("Małopolskie");
listawojewodztw.addItem("Wielkoposlkie");


listamiast = new JComboBox();
                listamiast.setBounds(180, 300, 170, 20);
                etykieta2 = new JLabel("Miasto: ");
                etykieta2.setBounds(80, 300, 170, 20);
                listamiast.addActionListener(al);
                
                String woj = listawojewodztw.getSelectedItem().toString();
                
                if (woj.equals("Małopolskie")) {
                    listamiast.addItem("Kraków");
                    listamiast.addItem("Miechów);}
                else if (woj.equals("Śląskie")) {
                    listamiast.addItem("Śląsk");
                }

Lecz nie działa to tak jak chciałbym. Jeśli województwo "Śląsk" ustawie jako pierwsze, wtedy pojawia się miasto Śląsk, a jeśli dam "Małopolskie" jako pierwsze wtedy pojawią się miasta Kraków i Miechów.

0

Lista miast zmienia się dla każdego z województw, ale wtedy kiedy w kodzie źródłowym zmienię pozycjami. A po skompilowaniu, podczas działania programu kiedy wybieram województwa z listy, to wtedy nic się nie dzieje, miasta się nie zmieniają.

0

Wg mnie tworzysz drugi combobox na podstawie tego co jest w pierwszym przy kopilacji tak jak pisałeś. Później po wybraniu nowej wartości w pierwszym nie tworzysz nowego drugiego więc pozostaje on bez zmian. Jak możesz to wrzuć cały kod albo może ktoś mądrzejszy się wypowie,

1

Zamień

listaMiast = new JComboBox();
//na
listaMiast.removeAllItems();
0

Niestety nie działa.

Zamieniłem tak jak powiedziałeś, jednak program się nie skompilował, wyrzuciło błędy. Kiedy dodałem tą linijkę w ten sposób:

listamiast = new JComboBox();
listamiast.removeAllItems();

program się skompilował, jednak nie przyniosło to żadnych zmian, nadal nie działa.

0

Niżej podaje zawartość całego kodu z klasy, w której tworzę taki mały formularz.

package formularz;
import javax.swing.*;
import java.awt.event.*;


public class wojewodztwa extends JFrame {
    JComboBox listawojewodztw, listamiast;
    JLabel etykieta, etykieta2, etimie, etnazwisko,etdata,etmiejsce;
    JTextField imie, nazwisko, dataurodzenia, miejsceurodzenia;
    
    public wojewodztwa() {
    ActionListener al = new ActionListener(){
    public void actionPerformed(ActionEvent e) {
    int index=listawojewodztw.getSelectedIndex();
    if (index < 1) return; 
    String tekst = listawojewodztw.getSelectedItem().toString(); 
    
          }
        };
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(null);
        
        //wojewodztwa
        listawojewodztw = new JComboBox();
        listawojewodztw.setBounds(180, 250, 170, 20);
                etykieta = new JLabel("Województwo:");
        etykieta.setBounds(80, 250, 170, 20);
                
                listawojewodztw.addItem("Małopolskie");
        listawojewodztw.addItem("Śląskie");
                listawojewodztw.addItem("Wielkoposlkie");
                listawojewodztw.addActionListener(al);
                
                  //miasta
                listamiast = new JComboBox();
                listamiast.setBounds(180, 300, 170, 25);
                etykieta2 = new JLabel("Miasto: ");
                etykieta2.setBounds(80, 300, 170, 25);
                listamiast.addActionListener(al);
                
                String woj = listawojewodztw.getSelectedItem().toString();
                
                if (woj.equals("Małopolskie")) {
                    listamiast.addItem("Kraków");
                    listamiast.addItem("Limanowa");}
                if (woj.equals("Śląskie")) {
                    listamiast.addItem("Śląsk");
                }
            
                
               
                
                //nazwisko
                nazwisko = new JTextField("");
                nazwisko.setBounds(180, 10, 170, 25);
                etnazwisko = new JLabel("Nazwisko: ");
                etnazwisko.setBounds(80, 10, 170, 25);
                

                //imie
                imie = new JTextField("");
                imie.setBounds(180, 50, 150, 25);
                etimie = new JLabel("Imię: ");
                etimie.setBounds(80, 50, 170, 25);
                
                //data urodzenia
                dataurodzenia = new JTextField("");
                dataurodzenia.setBounds(180, 90, 80, 25);
                etdata = new JLabel("Data urodzenia");
                etdata.setBounds(80, 90, 170, 25);
                
                //miejsceurodzenia
                miejsceurodzenia = new JTextField("");
                miejsceurodzenia.setBounds(190, 130, 170, 25);
                etmiejsce = new JLabel("Miejsce urodzenia: ");
                etmiejsce.setBounds(80, 130, 170, 25);
                  
              
        
                add(listawojewodztw);
                add(listamiast);
                add(etykieta);
                add(etykieta2);
                add(etimie);
                add(imie);
                add(etnazwisko);
                add(nazwisko);
                add(dataurodzenia);
                add(etdata);
                add(miejsceurodzenia);
                add(etmiejsce);
                setSize(600, 400);
                setVisible(true);    
    }

    
}
0

Nigdy nie pisz "wyrzuciło błędy".
Zawsze cytuj treść błędów.
Musisz wcześniej utworzyć JComboBox listamiast.


    public wojewodztwa() {
    listamiast = new JComboBox();
    ....
    
0

Dzieki, bede wiedział. Zmieniłem jak wyżej, niestety bez zmian...

0

Przerobiłem Twój ActionListener:

ActionListener al = new ActionListener(){
    public void actionPerformed(ActionEvent e) {
        int index=listawojewodztw.getSelectedIndex();
        String tekst = listawojewodztw.getSelectedItem().toString(); //tekst = tekst z wybranej pozycji
        if(tekst.equals("Małopolskie")){                
            listamiast.removeAllItems();
            listamiast.addItem("Kraków");
            listamiast.addItem("Limanowa");           
        }
        else if(tekst.equals("Śląskie")) {
            listamiast.removeAllItems();
            listamiast.addItem("Śląsk");
        }
    }
};
0

Działa, dziekuje bardzo za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1