Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    JComboBox e JComboBoxModel Vista e modello

    Salve a tutti.
    Sto riscontrando un problemino di aggiornamento della vista del JComboBox qual'ora aggiorno il relativo modello dei dati.
    Vi spiego la mia situazione astraendo da dettagli che possono creare solo confusione in quanto non centrali nella discussione.

    Ho due frame.
    Dal primo posso richiamare il secondo tramite un click su un pulsante.
    Nel 2° frame ho una combobox con la lista di categorie.
    nel 1° frame ho la possibilità di agg, mod e elim categorie(le stesse che poi vengono visualizzate come opzioni nella combobox).
    Ho implementato un mio comboBoxModel che vado opportunamente a modificare nel 1° frame in fase di agg, mod o elim di categorie.
    Al comboBox visualizzato nel 2° frame, ho settato come modello dei dati, quello che modifico nel 1° frame quindi sempre aggiornato, ma nel momento in cui apporto modifiche al modello dei dati del combo, la vista del combobox del 2° frame non visualizza piu le opzioni.
    Ho verificato che ricreando il frame contenente i combobox, la lista delle opzioni è quella aggiornata e viene regolarmente visualizzata, ma ripeto se sono attive entrambe le finestre e applico modifiche al modello del combo, ilcombo non visualizza piu alcuna opzione.
    Vi chiedo se c'è un metodo del comboboxmodel in grado di aggiornare il contenuto di tutte le viste (comboBox) che lo utilizzano tipo il metodo fireStructureTableChanged() del TableModel.
    Vi ringrazio.
    Un saluto a tutti, Paolo

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480

    Moderazione

    Ho spostato la discussione nel forum dedicato a Java.
    In futuro, poni qui le tue domande relative a questo linguaggio.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    mmm hai provato con l'interface ListDataListener?
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  4. #4
    ma se non erro quella viene utilizzata per eseguire codice al verificarsi di uno tra i 3 eventi firecontentschanged, fireintervaladded e fireintervalremoved in luogo della vista e cioè della JComboBox.
    Il mio intento è modificare il modello dei dati del JComboBox (vista) e far in modo che le modifiche apportate al modello vengano rese disponibili alla vista.

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Allora, una cosa del genere?
    codice:
    import javax.swing.*;
    import javax.swing.event.*;
    import java.awt.*;
    import java.awt.event.*;
    
    /**
     *
     * @author Andrea
     */
    public class JComboBoxModelTest extends JFrame {
        
        
        
        private class MyComboBoxModel extends DefaultComboBoxModel {
            
            private Object[] elements;
                    
            public MyComboBoxModel(Object[] elements) {
                super(elements);
                this.elements = elements;
            }       
            
        }
        
        private class MyComboBoxActionListener implements ActionListener {
            int index = 0;                                
            public void actionPerformed (ActionEvent ae) {
                if (!ae.getActionCommand().equalsIgnoreCase("comboboxedited") && box1.getSelectedIndex() != -1) {                
                    index = box1.getSelectedIndex();                        
                }
                else {                
                    box1.insertItemAt(box1.getEditor().getItem(), index);
                    box1.removeItemAt(index+1);
                   
                }
            }
        }
        
        private JComboBox box1,box2;
        private MyComboBoxModel commonModel;
        private JFrame openWindow;
        private String[] elements = {"pera", "banana", "mela", "anguria", "melone", "ciliegia"};
        
        
        
        /** Creates a new instance of JComboBoxModelTest */
        public JComboBoxModelTest() {
            super("Test JComboBox");
            this.setSize(300,500);
            this.setLayout(new BorderLayout());
            commonModel = new MyComboBoxModel(elements);        
            box1 = new JComboBox(commonModel);
            box1.setEditable(true);        
            box1.addActionListener(new MyComboBoxActionListener());
            box2 = new JComboBox(commonModel);
            this.getContentPane().add(box1, BorderLayout.NORTH);
            openWindow = new JFrame("Text JComboBox  2");
            openWindow.setSize(300,500);
            openWindow.getContentPane().add(box2, BorderLayout.NORTH);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setVisible(true);
            openWindow.setLocation(0,400);
            openWindow.setVisible(true);        
            
        }
        
        public static void main (String[] args) {
            new JComboBoxModelTest();
        }
        
    }
    Magari personalizza l'actionPerformed perché allo stato attuale puoi solo editare elementi e non aggiungerne di nuovi...
    <´¯)(¯`¤._)(¯`»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 © 2025 vBulletin Solutions, Inc. All rights reserved.