Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    38

    [Java] JComboBox connesse.

    Salve
    Ho 2 jcombobox connesse, nel senso che ad una selezione della prima dovrebbe corrispondere un refresh dei contenuti della seconda...
    ho provato in diversi modi ad implementare questa tecnologia,
    ma non riesco a fare il refresh
    nè con
    editableComboBox= new JComboBox(prova()); // dove prova è un metodo per ottenere un vector

    e neppure con

    private void riempi(){
    Vector a = prova();

    editableComboBox.removeAllItems();
    for (int i = 0; i < a.size(); i++){
    editableComboBox.addItem((String)(a.elementAt(i))) ;
    System.out.println((String)(a.elementAt(i)));
    }
    }

    Naturalmente mi visualizza sull'out tutti gli elementi inseriti... ma non so come mai non riesco a fare l'aggiornamento della combo

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Dopo aver utilizzato la prima soluzione, hai provveduto a rimettere la JComboBox nel JFrame e a validare il tutto con un validate()? Inoltre, prima di utilizzare l'istruzione new hai provveduto a rimuovere la JComboBox dal JFrame?
    Con un po' di codice:
    codice:
    // Prima di utilizzare new
    mioJFrame.remove( editableComboBox );
    mioJFrame.validate();
    
    // Ora eseguo la new
    editableComboBox= new JComboBox(prova()); 
    
    // Ora la rimetto al suo posto:
    mioJFrame.add( editableComboBox );
    mioJFrame.validate();
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    38
    grazie mille...
    posso anche rifargli ottenere la stessa posizione?
    Mi spiego meglio... ho degli oggetti (vari Jtextfields) che sono inseriti, e non vorrei perdere i dati scritti dall'utente ogni volta che aggiorno la combo

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Immagino che la tua JComboBox sia stata inserita da qualche parte... tramite l'utilizzo di particolari LayoutManager o tramite, comunque, dei pannelli.

    Per fargli ottenere la stessa posizione devi agire su questi due elementi: LayoutManager e Pannelli.

    Esempio: se la tua JComboBox viene inserita utilizzando un LayoutManager tipo BorderLayout, nella posizione WEST, ti basterà riproporre il metodo add() iniziale:
    codice:
    miaFinestra.add(editableComboBox, BorderLayout.WEST);
    Il contenuto delle JTextField non può, in ogni caso, essere perduto.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    a dire la verità, non serve togliere la combobox dal frame... ho un esempio bislacco qui:

    codice:
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    
    public class comboOnCombo extends JFrame implements ActionListener {
      
      JComboBox uno, due;
      String[] unoS = {"________", "Frutta", "Verdura", "Carne", "Pesce"};
      String[] due1S = {"Mela", "Pera", "Banana"};
      String[] due2S = {"Radicchio", "Carota", "Patata", "Peperone"};
      String[] due3S = {"Maiale", "Manzo", "Pollo"};
      String[] due4S = {"Cernia", "Orata", "Branzino", "Sarago"};
      String[][] dueS = {due1S, due2S, due3S, due4S};
    
      
      public void actionPerformed (ActionEvent ae) {
        int i = ((JComboBox)ae.getSource()).getSelectedIndex();
        if (i != 0) {
          due.removeAllItems();
          String[] data = dueS[i-1];
          for (int j= 0; j < data.length; j++) {
            due.addItem(data[j]);
          }
        }
        else {
          due.removeAllItems();
          
        }
        this.validate();
      }
      
      public comboOnCombo() {
        super("Esperimenti con le ComboBox");
        this.getContentPane().setLayout(new GridLayout(1,2));
        
        
        uno = new JComboBox(unoS);
        due = new JComboBox();
        uno.addActionListener(this);
        
        this.getContentPane().add(uno);
        this.getContentPane().add(due);
        this.setSize(300, 60);
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      }
      
      public static void main (String[] args) {
        comboOnCombo coc = new comboOnCombo();
      }
    }
    Chiaramente, con il remove dal contenitore (e il successivo reinserimento) puoi utilizzare il costruttore (e te ne esci senza il ciclo for)... ma devi andare a ripiazzare al posto giusto la combo... c'è sempre il rovescio della medaglia.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.