Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    16

    inserire combobox nella colonna di una jtable

    ciao ragazzi!
    ho bisogno di inserire una combobox nella colonna di una tabella, guardando esempi in rete ho fatto in questo modo ma la tabella ha le normali celle di testo, non c'è la combobox nella colonna impostata! cosa sbaglio?


    codice:
    publicclassEditorInterventiextends javax.swing.JDialog{
    private JComboBox patologie;
    
    private void initComponents() {
    patologie = new javax.swing.JComboBox();
    
    
    
    
    
    patologie.addItem("Snowboarding");
    patologie.addItem("Rowing");
    patologie.addItem("Chasing toddlers");
    patologie.addItem("Speed reading");
    tabellaTipiIntervento.setAutoCreateRowSorter(true);
    tabellaTipiIntervento.setModel(new javax.swing.table.DefaultTableModel(
        new Object [][] {
        },
        new String [] {
            "Tipo Intervento", "Note", "Patologia"
        }
    ) {
        Class[] types = new Class [] {
            java.lang.String.class, java.lang.String.class, javax.swing.JComboBox.class
        };
        public Class getColumnClass(int columnIndex) {
            return types [columnIndex];
        }
    });
    
    TableColumn sportColumn =  tabellaTipiIntervento.getColumnModel().getColumn(1);
    sportColumn.setCellEditor(new DefaultCellEditor(patologie));
    
     private javax.swing.JTable tabellaTipiIntervento;
    l'inizializzazione di "tabellaTipiIntervento" è: modelloTipiIntervento = myclass.getModelloTipiVuoto();
    public static DefaultTableModel getModelloTipiVuoto()
    {
    String[] colonne={"Tipo", "Note", "Patologia"};

    return new DefaultTableModel(colonne,0);
    }

    praticamente quando premo un pulsante mi aggiunge una riga alla tabella, che inizialmente è vuota

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da kaitokid Visualizza il messaggio
    codice:
        Class[] types = new Class [] {
            java.lang.String.class, java.lang.String.class, javax.swing.JComboBox.class
        };
    No, il class della colonna deve rappresentare il tipo "logico" del valore (es. String, Integer, ....) della cella, non il componente GUI da usare!! Questo perché getValueAt dovrà restituire oggetti di quel tipo (es. se il tuo combo è di elementi String, nella cella il valore selezionato è uno solo, appunto un String).

    Inoltre se assegni solo un editor, il combo si vedrà solo quando la cella entra in fase di editing, non prima. Se vuoi che si veda un combobox su tutte le celle anche non in edit .... allora devi assegnare un apposito renderer. Peccato che non esiste un equivalente/speculare di DefaultCellEditor che sia in grado di trattare JCheckBox/JComboBox/JTextField.
    E pertanto dovresti implementare un renderer da zero ... e in modo corretto/appropriato.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    16
    Quote Originariamente inviata da andbin Visualizza il messaggio
    No, il class della colonna deve rappresentare il tipo "logico" del valore (es. String, Integer, ....) della cella, non il componente GUI da usare!! Questo perché getValueAt dovrà restituire oggetti di quel tipo (es. se il tuo combo è di elementi String, nella cella il valore selezionato è uno solo, appunto un String).

    Inoltre se assegni solo un editor, il combo si vedrà solo quando la cella entra in fase di editing, non prima. Se vuoi che si veda un combobox su tutte le celle anche non in edit .... allora devi assegnare un apposito renderer. Peccato che non esiste un equivalente/speculare di DefaultCellEditor che sia in grado di trattare JCheckBox/JComboBox/JTextField.
    E pertanto dovresti implementare un renderer da zero ... e in modo corretto/appropriato.
    grazie!
    devo cercare una soluzione più semplice allora, purtroppo non saprei dove mettere le mani per implementare un renderer da zero

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.