Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    160

    [JAVA] Celle di una JTable su più linee

    Ciao a tutti!

    Girando per Internet ho trovato un pezzo di codice per poter visualizzare una cella di una JTable su più righe e l'ho adattato al mio programma. Il codice è il seguente:

    codice:
    package MyPackage;
    
    import java.awt.Component;
    
    import javax.swing.JTable;
    import javax.swing.JTextArea;
    import javax.swing.UIManager;
    import javax.swing.border.EmptyBorder;
    import javax.swing.table.TableCellRenderer;
    
    public class MyTableCellRenderer extends JTextArea implements TableCellRenderer {
    
    	private static final long serialVersionUID = 1L;
    
    	
    	public MyTableCellRenderer(){
    		setLineWrap(true);
    		setWrapStyleWord(true);
    		setOpaque(true);
    	}
    	
    	public Component getTableCellRendererComponent(JTable table,Object value,boolean isSelected,boolean hasFocus,int row,int col) {
    		if (isSelected) {
    			setForeground(table.getSelectionForeground());
    		    setBackground(table.getSelectionBackground());
    		} 
    		else {
    			setForeground(table.getForeground());
    		    setBackground(table.getBackground());
    		}
    		setFont(table.getFont());
    		if (hasFocus){
    			if (table.isCellEditable(row,col)) {
    				setForeground( UIManager.getColor("Table.focusCellForeground") );
    		    	setBackground( UIManager.getColor("Table.focusCellBackground") );
    			}
    		} 
    		else {
    			setBorder(new EmptyBorder(1, 2, 1, 2));
    		}
    		int rowHeight = (int) getMinimumSize().height;
    		if (table.getRowHeight() != rowHeight)
    				table.setRowHeight(row,rowHeight);
    		setText((value == null) ? "" : value.toString());
    		return this;
    	}
    }
    Il problema è che quando vado a modificare la riga di una tabella, non mi aumenta la dimensione della riga stessa ma di quella sotto!!!

    Cioè se ho una tabella con due righe e modifico la riga 0 per vedere se il testo si espande su due righe, mi modifica l'altezza della riga sotto di essa (e viceversa, cioè se modifico la riga 1 mi modifica la riga 0).

    Non riesco a capire perché fa così.

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

    Re: [JAVA] Celle di una JTable su più linee

    Originariamente inviato da Manugal
    Il problema è che quando vado a modificare la riga di una tabella, non mi aumenta la dimensione della riga stessa ma di quella sotto!!!
    Il codice è comunque errato. Se metti nel getTableCellRendererComponent() un System.out.println() che stampa riga/colonna (o quello che vuoi) vedrai che stampa continuamente .... anche se non fai nulla sulla tabella.

    E quello che se ne deduce è che quello non è l'approccio corretto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    160
    E come potrei fare allora per poter adattare l'altezza di una cella alla lunghezza del testo?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Manugal
    E come potrei fare allora per poter adattare l'altezza di una cella alla lunghezza del testo?
    Innanzitutto tu hai parlato solo di "renderer" ma se quelle celle sono anche editabili devi gestire opportunamente anche un "editor". L'editor di default usa un JTextField che ignora eventuali newline e te li fa "perdere".

    Per l'altezza ... dovrei pensarci e provare. Nel senso che non l'ho mai fatto neanch'io.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    160
    Per editarle non è un problema perché non edito direttamente la cella ma premo un tasto "modifica" che mi apre una finestra dove inserisco i dati e poi quando premo ok mi modifica i dati su quella riga della tabella. Il problema è solo per l'altezza dinamica delle righe.

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.