Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 37
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    126

    [JAVA] JTable problemi vari

    Ciao raga,
    qualcuno sa come fare per:
    - creare un campo check box per i valori booleani in una determinata colonna di una JTable
    - lasciare la possibilità di modificare solo i valori di una determinata colonna mentre le altre colonne bloccarle alla modifica
    - Impostare dimensioni fisse ogni colonna diversa.
    Ciauz e grazie anticipate

  2. #2

    Re: [JAVA] JTable problemi vari

    Originariamente inviato da cat82
    Ciao raga,
    qualcuno sa come fare per:
    - creare un campo check box per i valori booleani in una determinata colonna di una JTable
    - lasciare la possibilità di modificare solo i valori di una determinata colonna mentre le altre colonne bloccarle alla modifica
    - Impostare dimensioni fisse ogni colonna diversa.
    Ciauz e grazie anticipate
    Per il primo punto sovrascrivi il metodo getColumnClass del TableModel associato alla JTable ritornando boolean quando il valore della colonna è uguale a quello dove vuoi i checkbox, avrai automaticamente il comportamente che cerchi perchè il renderer di default per quel tipo di dato è proprio un checkbox

    -per il secondo sovrascrivi il metodo setEditable della stessa classe ritornando true per le colonne (o per lecelle) che vuoi editabili e false per le altre

    -non mi è mai servito ma credo tu debba usare qualche metodo del tableheader associato alla jtable
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    126
    Grazie per l'aiuto unomichisiada,
    ma nn ho capito molto di cosa devo fare, puoi essere cosi cortese da farmi capire meglio magari con qualche riga di codice o qualche link dove posso trovare qualche esempio il da farsi.
    Ciao e grazie

  4. #4
    Originariamente inviato da cat82
    Grazie per l'aiuto unomichisiada,
    ma nn ho capito molto di cosa devo fare, puoi essere cosi cortese da farmi capire meglio magari con qualche riga di codice o qualche link dove posso trovare qualche esempio il da farsi.
    Ciao e grazie
    Al momento non ho righe di codice da postarti perchè non sono a casa e non le scrivo sul momento perchè ti potrei scrivere rob che non compila, comunque a grandi linee ti posso dire che una JTable (così come tutti i componenti JFC) ha associato un modello che racchiude diciamo il comportamento ed i dati associati al controllo.Per la JTable questo modello si chiama in generale TableModel (che è l'interfaccia base) ed ogni JTable istanzita ha associato un DefaultTableModel che è una classe con l'implementazione di default di questa interfaccia (se non ne hai capito nulla è meglio che ti studi classi e interfacce in java primadi proseguire).Ebbene tu hai la possibilità di ridefinire i metodi di una classe come sai o dovresti sapere, ti basta creare un nuovo oggetto DefaultTableModel, ridefinire al volo i metodi che ti ho detto e poi usare l'apposito metodo di Jtable per far si che il suo modello diventi quello che hai appena creato.
    codice:
    DefaultTableModel model = new DefaultTableModel()
    {
       boolean isCelleditable(int row,int col)
      {
         if(col == 5)
           return true 
         else
            ...
       }
        //altri metodi
    };
     table.setModel(model);
    Ripeto prendi questocodice cone le pinze perchè non è testato e la memoria potrebeb giocarmi brutti scherzi

    Tral'altro nel post precedente ti ho detto di sovrascrivere setEditable sbagliando, proprio a causa di questi brutti scherzi
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    126
    ho creato la seguente classe:

    public class PersonalizzaJTable extends AbstractTableModel {


    private String[] colonne;
    private Object[][] cells;

    /** Creates a new instance of PersonalizzaJTable */
    public PersonalizzaJTable(Object[][] cells,String[] colonne) {
    this.colonne=colonne;
    this.cells=cells;
    }

    public int getColumnCount() {
    System.out.println("colonne.length : "+colonne.length);
    return colonne.length;

    }

    public int getRowCount() {
    System.out.println("cells.length : "+cells.length);
    return cells.length;
    }

    public String getColumnName(int col) {
    return colonne[col];

    }

    public Object getValueAt(int row, int col) {
    System.out.println("row "+row);
    System.out.println("col "+col);
    return cells[row][col];
    }



    /*
    * JTable uses this method to determine the default renderer/
    * editor for each cell. If we didn't implement this method,
    * then the last column would contain text ("true"/"false"),
    * rather than a check box.
    */
    public Class getColumnClass(int c) {
    System.out.println("c "+c);
    return getValueAt(0, c).getClass();
    }
    }

    e la inizializzo cosi nella mia classe principale:

    Tabella = new JTable(new PersonalizzaJTable(cells,columnNames));

    Ho un unico problema.Prima con il DefaultTableModel avevo il metodo: .setDataVector che mi permetteva di caricare all'interno della JTable i miei dati modificati caricati da una tabella in un db.
    Ora se cerco di caricare altri dati nella JTable rivedo sempre quelli vecchi.
    Cosa e come popsso fare?
    Grazie

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    126
    Ho risolto questo problema,
    ma come posso fare per nn rendere editabili le colonne tranne che quelle booleane che nn ci riesco?

  7. #7
    Originariamente inviato da cat82
    Ho risolto questo problema,
    ma come posso fare per nn rendere editabili le colonne tranne che quelle booleane che nn ci riesco?
    all'interno di PersonalizzaJTable socrascrivi anche isCellEditable, metodo cui vengono passati come parametri la riga e la colonna della cella in esame, ti basta controllare il valore di col e quando corrisponde a quello delle cell booleane ritorni false.
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    126
    Ok fatto e funziona.Per usare però il metodo .setDataVector() ho dovuto cambiare la classe estesa con DefaultTableModel visto che estende AbstarctableModel.
    Ora però nn riesco a dirgli di selezionare l'intera riga e nn la singola cella.
    C'è un modo per fare cio?
    Per le dimensioni delle singole colonne ho provato a cercare qualche metodo per fare cio ma niente.Suggerimenti?
    Ciao e grazie mille

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    126
    Ho risolto il problema della dimensione delle colonne ma persiste l'errore di selezionare solo una singola cella.
    Quando usavo il DefaultTableModel avevo implementatato il seguente:

    if (gestioneRigheJTable) { // true by default
    ListSelectionModel rowSM = Tabella.getSelectionModel();
    rowSM.addListSelectionListener(new ListSelectionListener() {
    public void valueChanged(ListSelectionEvent e) {
    //Ignore extra messages.
    if (e.getValueIsAdjusting()) return;

    ListSelectionModel lsm = (ListSelectionModel)e.getSource();
    if (lsm.isSelectionEmpty()) {
    selectedRow=-1;
    System.out.println("No rows are selected.");
    } else {
    selectedRow = lsm.getMinSelectionIndex();
    VisualizzaRecordSelezionato(selectedRow);
    System.out.println("Row " + selectedRow + " is now selected.");
    }
    }
    });
    } else {
    Tabella.setRowSelectionAllowed(false);
    }

    Ora però nn funziona +.Qualcuno sa il perchè.Lo devo inserire nella mia classe PersonalizzaJTable? E se si come posso fare.
    Grazie

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    126
    Ok risolto anche questo, ciao a tutti, a fra poco tanto mi verranno fuori sicuramente problemi

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.