JTable

di il
34 risposte

JTable

Ho una taballa JTable. In una colonna ho il prezzo, in un'altra ho la quantità e in un'altra ancora il totale. Vorrei che automaticamente quando modifico o il prezzo o la quantità deve cambiare il totale... Come si fa? Grazie...

34 Risposte

  • Re: JTable

    Potrebbe bastare un TableModelListener apposito per "sentire" le modifiche alle celle ma il modo più completo e pulito è di implementare un table model "personalizzato" (tipicamente estendendo AbstractTableModel).
  • Re: JTable

    Edit: risolto
  • Re: JTable

    p0ll0_ ha scritto:


    Sapete se c'è un modo per alternare i colori delle righe, tipo così:

    https://media.geeksforgeeks.org/wp-content/uploads/2019-02-16.png
    Certo, si può. Concettualmente: si estende JTable e si ridefinisce il metodo prepareRenderer. Come prima cosa, esso richiama la versione "super" (quella vera di JTable), poi imposta il background del Component (per qualunque cella della stessa riga) con una logica del tipo, es.: tutti i componenti delle righe pari hanno background verde, tutti quelli delle righe dispari hanno background bianco.
    Ma solo se la cella non è selezionata, perché in tal caso è già il renderer che imposta il colore apposito di "selezione". Altrimenti lo sovrascriveresti e non si vedrebbe la selezione.
  • Re: JTable

    Edit: risolto.
  • Re: JTable

    p0ll0_ ha scritto:


    Non ho capito niente. Io la tabello la creo direttamente da GUI, come nella foto:
    https://ibb.co/9tKqK6
    Come faccio da lì?
    Da lì non lo fai.
    Devi scrivere tu il codice, non fartelo produrre dall'IDE. L'IDE può produrre del codice "standard" (generalmente lo fa anche piuttosto male), ma non puoi pretendere che generi codice custom.

    Devi creare una classe che estende JTable e ridefinire il metodo prepareRenderer() come ti ha già illustrato andbin.
  • Re: JTable

    Edit: risolto.
  • Re: JTable

    p0ll0_ ha scritto:


    Non mi appare la riga con i titoli delle colonne... Perché?
    Perché hai prima aggiunto il JTable come vista in JScrollPane ma poi hai ri-aggiunto la stessa JTable nel jPanel1 e questo la TOGLIE da dentro JScrollPane. E' grazie a JScrollPane che "vedi" le intestazioni!
  • Re: JTable

    Riciao. Come funziona l'AbstractTableModel? Non riesco a trovare niente di comprensibile in rete. Per ora ho scritto questo:
        AbstractTableModel modello = null;
    
        String[] colonne = new String[]{
            "Codice prodotto", "Descrizione", "Qantità", "Prezzo", "Totale", "Scadenza"
        };
        Object[][] righe = new Object[][]{
            {"asfsdfsdf", "sdfsdfsdf", "sdgdsfgdfgd", "sdgfdgdf", "sddsfsdfsd", "sdgdfgdfg"},
            {"asfsdfsdf", "sdfsdfsdf", "sdgdsfgdfgd", "sdgfdgdf", "sddsfsdfsd", "sdgdfgdfg"},};
    
        public void tabella_() {
    
            jLabel1.setLayout(new GridLayout());
    
            JTable tabella = new JTable(righe, colonne);
         
            tabella.setModel(modello);
    
            tabella.getTableHeader().setFont(new java.awt.Font("Tahoma", 0, 24));
    
            jLabel1.add(new JScrollPane(tabella));
    
        }
  • Re: JTable

    Un consiglio spassionato: dai un'occhiata al tutorial ufficiale su JTable. Lo trovi qui: https://docs.oracle.com/javase/tutorial/uiswing/components/table.html.
    Nel tutorial trovi anche la risposta alla tua ultima domanda, nel paragrafo: Creating a Table Model. Ci sono anche diversi esempi.
  • Re: JTable

    Hai letto quello che hoscritto? Ho detto che in rete non trovo niente di comprensibile. Che cosa devo fare?
  • Re: JTable

    Nel senso che non comprendi neanche il tutorial che ti è stato proposto?
  • Re: JTable

    Come faccio a cambiare la dimensione di alcune delle colonne?
    Se faccio come nel codice non funziona:
        
        
        public void tabella_() {
            jLabel1.setLayout(new GridLayout());//questo codice funziona
            JTable tabella = new JTable(righe, colonne);//questo codice funziona
            tabella.getColumnModel().getColumn(0).setWidth(4000);//questo codice NON funziona
            tabella.getTableHeader().setFont(new java.awt.Font("Tahoma", 0, 24)); //questo codice funziona
            jLabel1.add(new JScrollPane(tabella));//questo codice funziona
    
        }
    Ho provato anche ad inserire diversi layout al posto diGridLayout niente da fare...
  • Re: JTable

    Ma hai risposto a me?
  • Re: JTable

    Queste sono le cose che mi servono :

    - C'è questo errore: quando clicco su una cella per modificarne il testo all'interno il font diventa più piccolo e vorrei rimanesse della stessa dimensione.
    - Vorrei fare il classico menù a tendina che c'è in qualsiai programma, tipo File - Modifica - ecc ecc.
    - C'è questo errore per cui quando scrivo in una cella, tutte le altre celle della stessa riga prendono la stessa scritta, come si toglie?
Devi accedere o registrarti per scrivere nel forum
34 risposte