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

    (Java) jTable, scrollPanel e blocca riquadri

    ciao a tutti,
    ho un oggetto di tipo jTable inserito all'interno di un pannello scorrevole.
    Vorrei far si che durante lo scorrimento orizzontale una parte della jTable resti fissa (un po' come accade con l'opzione "blocca riquadri" di excel): ad esempio se decido di scorrere orizzontalmente le prime due colonne restano fisse (e quindi sempre visibili) e le altre invece scorrono.

    Come si fa?

    grazie a tutti per l'eventuali aiuto.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: (Java) jTable, scrollPanel e blocca riquadri

    Originariamente inviato da caimano73
    ho un oggetto di tipo jTable inserito all'interno di un pannello scorrevole.
    Vorrei far si che durante lo scorrimento orizzontale una parte della jTable resti fissa (un po' come accade con l'opzione "blocca riquadri" di excel): ad esempio se decido di scorrere orizzontalmente le prime due colonne restano fisse (e quindi sempre visibili) e le altre invece scorrono.
    Tecnicamente si può fare.

    Premessa:
    Se guardi la seguente immagine dalla documentazione ufficiale:


    Noterai che il JViewport è solo una parte (centrale) del JScrollPane. Perché ci sono altre aree nel JScrollPane, cioè i 4 bordi e 4 angoli. A parte le 2 aree dove normalmente ci sono le scrollbar, ognuna delle altre aree può contenere un Component.
    Quando metti un JTable nel JScrollPane, normalmente il JTable è la "view" centrale e il JTableHeader viene messo come "column header" nel JScrollPane.


    Se vuoi delle colonne fisse sulla sinistra, allora dovresti mettere un JTable nella parte "row header" (la striscia a sinistra). Lo scrolling verticale è già gestito, nel senso che il JScrollPane scrolla sia il JViewport centrale, sia il JViewport del row header. E supponendo che le due tabelle abbiano stesso numero di righe e stessa altezza per le righe corrispondenti, il risultato è corretto/gradevole.

    Purtroppo, come ti ho detto, devi avere 2 tabelle separate e questo .... potrebbe non essere quello che vuoi o perlomeno complicarti un pochino la vita (dipende dal model che hai o intendi usare).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3

    Re: Re: (Java) jTable, scrollPanel e blocca riquadri

    Originariamente inviato da andbin
    Tecnicamente si può fare.


    Purtroppo, come ti ho detto, devi avere 2 tabelle separate e questo .... potrebbe non essere quello che vuoi o perlomeno complicarti un pochino la vita (dipende dal model che hai o intendi usare).
    grazie.
    Immaginavo una cosa del genere: anni fa (quando ancora le jTable non esistevano e lavoravo con gli awt) avevo implementato una cosa del genere per avere un pannello di scorrimento con delle colonne fisse.
    Pensavo che ora si potesse fare avendo una unica jTable. Purtroppo il codice è già esistente ed è già abbastanza complesso: il cliente ha chiesto se fosse possibile bloccare le prime n colonne e far scorrere il resto, ma se è una cosa che si può fare in poco tempo ok, altrimenti a gratis non la posso fare....

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: (Java) jTable, scrollPanel e blocca riquadri

    Originariamente inviato da caimano73
    Purtroppo il codice è già esistente ed è già abbastanza complesso: il cliente ha chiesto se fosse possibile bloccare le prime n colonne e far scorrere il resto, ma se è una cosa che si può fare in poco tempo ok, altrimenti a gratis non la posso fare....
    Dipende dal table model che hai usato.
    Una cosa "furba" potrebbe essere quella di realizzare un table model che faccia da "wrapper" per il tuo table model "vero". Il wrapper "presenta" all'esterno solo una "visione" del tuo vero table model. Basterebbe dirgli: fammi vedere dalla colonna X alla colonna Y. E il wrapper passa le invocazioni sul vero table model semplicemente cambiando l'indice di colonna.

    A questo punto sarebbe banalissimo fare 2 tabelle con 2 model "wrapper" che agiscono entrambi sul tuo vero e unico table model.

    EDIT: salvo per un problemino che mi è venuto in mente giusto adesso .... la gestione del TableModelListener.
    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 © 2025 vBulletin Solutions, Inc. All rights reserved.