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

    [JAVA] Personalizzare una JTable

    Salve a tutti, avrei bisogno di personalizzare una JTable, in particolare la visualizzazione.
    Ho una tabella che rappresenta un file, quindi ogni suo singolo byte come 2 caratteri esadecimali. La tabella ha 16 colonne e varie righe a seconda della lunghezza del file (un po come il programma winhex per capirci). Quando seleziono una cella vorrei evidenziare la cella ed alcune celle ad essa contigue (tutte quelle che rappresentano lo stesso dato in memoria). Sicuramente devo usare un tableCellRenderer personalizzato ma saprei in che modo.
    Vi ringrazio in anticipo!

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480

    Moderazione

    Esiste un'area apposita dedicata a Java: sposto la discussione.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Si scusate!

  4. #4
    Mmm credo di essere arrivato alla soluzione da solo...ora faccio delle prove e in caso positivo posto la soluzione...dovesse servire mai a qualcuno!!!

  5. #5
    Ok funziona...sempre se importasse a qualcuno

    Metto il codice:
    codice:
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component precotto = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); int rowSel=table.getSelectedRow(); int colSel=table.getSelectedColumn(); int elemSel=(rowSel*16)+(colSel-1); int thisElem=(row*16)+(column-1); //Se è selezionata una cella if(colSel>=0 && rowSel>=0){ //Se la cella selezionata è dell'intestazione [0-511] if(elemSel<512){ if(thisElem<512 && column!=17 && column!=0){ precotto.setForeground(table.getSelectionForeground()); precotto.setBackground(table.getSelectionBackground()); } else{ precotto.setForeground(Color.BLACK); precotto.setBackground(Color.WHITE); } } //Se la cella selezionata è un record [512-...] else{ int thisRecord=(thisElem-512)/129; int selRecord=(elemSel-512)/129; if(thisRecord==selRecord && column!=17 && column!=0 && thisElem>=512){ precotto.setForeground(table.getSelectionForeground()); precotto.setBackground(table.getSelectionBackground()); } else{ precotto.setForeground(Color.BLACK); precotto.setBackground(Color.WHITE); } } } else{ precotto.setForeground(Color.BLACK); precotto.setBackground(Color.WHITE); } if(column==0){ setHorizontalAlignment(RIGHT); precotto.setForeground(Color.BLACK); precotto.setBackground(Color.GREEN); } else if(column==17) setHorizontalAlignment(LEFT); else setHorizontalAlignment(CENTER); return this; }
    Usando l'ogetto table del metodo posso risalire alla cella selezionata e controllare se quella corrente (quella che viene ritornata dal metodo) fa parte dello stesso record oppure no. In caso affermativo la evidenzio altrimenti no.

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.