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

    [JAVA] JComboBox: Modificare testo di una voce durante l'esecuzione del programma

    Salve a tutti.

    Ho un "piccolo" problema dal quale però non riesco ad uscire ( ): in un'interfacca swing ho un JComboBox (che ovviamente contiene una serie di voci) e un JTextField...

    Selezionando una voce del jcomboBox il suo testo appare nel jtextfield, ora l'utente deve modificare il testo contenuto nel jtextfield e questo nuovo nome deve apparire al posto del nome della voce del jcombobox selezionata precedentemente.
    Ad esempio quindi se seleziono la voce "pippo" nel JComboBox e nel JTextField scrivo "pluto", quest'ultima sarà la stringa che devo andare a sostituire a "pippo" nel JComboBox.

    Ho provato con 'setSelectedItem(nuovaStringa)' ma non modifica nulla

  2. #2
    Devi rendere editabile la JComboBox, mediante l'istruzione:
    codice:
    combo.setEditable( true );
    In questo modo la combo è editabile (cioè l'utente può scriverci direttamente dentro), e inoltre il metodo setSelectedItem imposta qualsiasi valore, anche se non presente nella lista iniziale.

    Ciao,

  3. #3
    Originariamente inviato da interarete
    Devi rendere editabile la JComboBox, mediante l'istruzione:
    codice:
    combo.setEditable( true );
    In questo modo la combo è editabile (cioè l'utente può scriverci direttamente dentro)
    Preferirei che questo non fosse possibile, anche perchè altrimenti il JTextField diverrebbe inutile.


    Originariamente inviato da interarete e inoltre il metodo setSelectedItem imposta qualsiasi valore, anche se non presente nella lista iniziale.
    Scusa ma non ho capito che vuoi dire...

  4. #4
    Se la combo non è editabile, il metodo setSelectedItem permette di impostare solamente uno tra i valori presenti nella lista di opzioni della combo.
    D'altra parte, se l'utente può inserire un valore digitandolo, oltre che scegliendolo dalla combo, la cosa più pulita è proprio quella di utilizzare una combo editabile, piuttosto che aggiungere un campo di testo e poi allinearlo alla combo.

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    anch'io la vedo come interarte, dovresti sfruttare l'editabilità della combo direttamente... comunque se per ragioni tue non puoi/vuoi, devi mettere mano al model della combo

    codice:
    import java.awt.event.*;
    import java.awt.*;
    import javax.swing.*;
    /**
     *
     * @author Andrea
     */
    public class JComboJText extends JFrame {
        
        private class JComboBoxListener implements ActionListener {
            public void actionPerformed(ActionEvent ae) {
                mytext.setText((String)mycombo.getSelectedItem());
            }
        }
        
        //questo modificherà solamente l'elemento "a vista"
        private class JButtonListener implements ActionListener {
            public void actionPerformed(ActionEvent ae) {
                mycombo.setEditable(true);
                mycombo.setSelectedItem(mytext.getText());
                mycombo.setEditable(false);
            }
        }
        
        //questo modificherà la lista vera e propria
        private class JButtonListener2 implements ActionListener {
            public void actionPerformed (ActionEvent ae) {
                DefaultComboBoxModel model = (DefaultComboBoxModel)mycombo.getModel();
                int index = model.getIndexOf(model.getSelectedItem());
                model.insertElementAt(mytext.getText(), index);
                model.removeElementAt(index+1);         
            }
        }
        
        private JComboBox mycombo;
        private JTextField mytext;
        private JButton mybutton;
        private int index;
        
        
        
        /** Creates a new instance of JComboJText */
        public JComboJText() {
            super("Demo");
            this.setSize(400,80);
            this.getContentPane().setLayout(new GridLayout(1,3));
            mycombo = new JComboBox(new String[] {"", "Pippo", "Pluto", "Paperino", "Topolino"});
            mycombo.addActionListener(new JComboBoxListener());
            mytext = new JTextField();
            mybutton = new JButton("Modifica");
            mybutton.addActionListener(new JButtonListener());
            this.getContentPane().add(mycombo);
            this.getContentPane().add(mytext);
            this.getContentPane().add(mybutton);
            this.setVisible(true);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
        
        public static void main(String[] args) {
            new JComboJText();
        }
        
    }
    il secondo listener modifcherà la lista, il primo solo l'elemento selezionato.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  6. #6
    Emh... ho provato il tuo programma ma la voce del JComboBox viene modificata quando si preme il bottone "modifica", ma poi basta ricliccare sulla JComboBox per vedere come le voci in realtà siano sempre le stesse, non viene apportata nessuna modifica ad esse :master:


    Ah... NON devo aggiungere voci alla lista, ma solo poter modificare quelle già esistenti.

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    e meno male che avevo detto che il listener non ti lascia modificare le voci nella lista, mentre il listener2 ti modifica la lista... e chissà che listener è attacco al bottone modifica? Almeno leggere tutto il codice visto che tra l'altro trattasi di due dozzine di righe.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  8. #8
    Originariamente inviato da Andrea1979
    e meno male che avevo detto che il listener non ti lascia modificare le voci nella lista, mentre il listener2 ti modifica la lista... e chissà che listener è attacco al bottone modifica? Almeno leggere tutto il codice visto che tra l'altro trattasi di due dozzine di righe.
    Chiedo perdono!
    Non so perchè ma mi ero sognato una chiamata al JButtonListener2 da parte del JButtonListener!
    Tutto ok... che pirla che sono!!

    Domandina stupida, ma il JButtonListener (in generale, non solamente nel mio caso specifico) che utilità può avere dal momento che apporta solo modifiche "volatili"? :master:

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    era solo per dimostrarti i due comportamenti, senza e con la modifica del model.
    <´¯)(¯`¤._)(¯`»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.