Visualizzazione dei risultati da 1 a 10 su 12

Discussione: Alternativa a JTable

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da LuLyLuNa Visualizza il messaggio
    Ho utilizzato una JTable ma ho bisogno che vi sia una label (o etichetta) sia sulla colonna (che con la JTable viene visualizzata), sia sulle righe (cosa che invece la JTable forse non permette).
    JTable permette di avere 1 "header" sulle colonne. Non offre di per sé nulla riguardo "header" sulle singole righe.
    Ma tu potresti banalmente farlo mettendo una colonna in più a sinistra magari con un colore di sfondo differente (o magari, azzardo, addirittura con lo stesso renderer che viene usato per gli header di colonna).

    Se non vuoi che questa colonna sia "scrollabile" orizzontalmente (verticamente invece ha senso) insieme alla tabella, esiste anche una tecnica particolare che sfrutta una caratteristica di JScrollPane, cioè il fatto che in JScrollPane ci sono 9 aree (vedi disegnino nella documentazione javadoc: JScrollPane) tra cui anche un'area normalmente non utilizzata chiamata "row header".

    Quando metti un JTable come "view" in JScrollPane, esso mette il JTableHeader nell'area "column header". Basterebbe mettere una intera JTable di 1 sola colonna nell'area "row header" per avere una intestazione fissa sulle righe.
    Come gestire i dati è un altro discorso ma ... si può fare benissimo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    104
    Quote Originariamente inviata da andbin Visualizza il messaggio
    JTable permette di avere 1 "header" sulle colonne. Non offre di per sé nulla riguardo "header" sulle singole righe.
    Ma tu potresti banalmente farlo mettendo una colonna in più a sinistra magari con un colore di sfondo differente (o magari, azzardo, addirittura con lo stesso renderer che viene usato per gli header di colonna).

    Se non vuoi che questa colonna sia "scrollabile" orizzontalmente (verticamente invece ha senso) insieme alla tabella, esiste anche una tecnica particolare che sfrutta una caratteristica di JScrollPane, cioè il fatto che in JScrollPane ci sono 9 aree (vedi disegnino nella documentazione javadoc: JScrollPane) tra cui anche un'area normalmente non utilizzata chiamata "row header".

    Quando metti un JTable come "view" in JScrollPane, esso mette il JTableHeader nell'area "column header". Basterebbe mettere una intera JTable di 1 sola colonna nell'area "row header" per avere una intestazione fissa sulle righe.
    Come gestire i dati è un altro discorso ma ... si può fare benissimo.
    hai ragione, potrei usare la prima colonna come "header" delle righe..
    avendo una JTable così

    DefaultTableModel model = new DefaultTableModel();

    non so, però, come si setta il background di una colonna..

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da LuLyLuNa Visualizza il messaggio
    hai ragione, potrei usare la prima colonna come "header" delle righe..
    avendo una JTable così

    DefaultTableModel model = new DefaultTableModel();

    non so, però, come si setta il background di una colonna..
    Innanzitutto se è una colonna di "intestazione" per le righe, non dovrebbe mai essere editabile. In DefaultTableModel tutte le celle sono per default editabili. Se vuoi applicare una logica differente usando sempre DefaultTableModel, devi estendere DefaultTableModel (anche con una anonymous inner class, se viene breve) e fare l'override di isCellEditable.

    Per quanto riguarda lo sfondo, è principalmente il renderer che controlla l'aspetto (sfondo compreso) delle celle.
    Potresti creare un tuo renderer apposito ma ovviamente risulta non breve e non banale. Prima dicevo (anzi .. azzardavo) che si potrebbe anche andare a prendere il renderer delle colonne.

    Non testato, ecco due possibili passi da fare:

    codice:
    TableCellRenderer rendererColonne = tabella.getTableHeader().getDefaultRenderer();
    
    tabella.getColumnModel().getColumn(0).setCellRenderer(rendererColonne);

    Ripeto: l'ho scritto al volo ... non l'ho provato. Verifica se funziona e se l'aspetto perlomeno è ok e gradevole.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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 © 2026 vBulletin Solutions, Inc. All rights reserved.