Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo
Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo
Per diversi giorni il Galaxy S26 Ultra di Samsung è stato il nostro compagno di vita. Oltre alle conferme del colosso coreano come la qualità del display e una suite AI senza rivali, arriva il Privacy Display, un unicum nel mondo smartphone. Ci sono ancora alcuni gap che non sono riusciti a colmare lato batteria e fotocamera, seppur con alcuni miglioramenti.
Diablo II Resurrected: il nuovo DLC Reign of the Warlock
Diablo II Resurrected: il nuovo DLC Reign of the Warlock
Abbiamo provato per voi il nuovo DLC lanciato a sorpresa da Blizzard per Diablo II: Resurrected e quella che segue è una disamina dei nuovi contenuti che abbiamo avuto modo di sperimentare nel corso delle nostre sessioni di gioco, con particolare riguardo per la nuova classe dello Stregone
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup
Siamo tornati nel parco tecnologico di Trieste per il kick-off del programma che mette a disposizione di cinque startup le infrastrutture di ricerca, dal sincrotrone Elettra ai laboratori di genomica e HPC. Roberto Pillon racconta il modello e la visione
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-03-2009, 13:52   #1
federico100mt
Member
 
Iscritto dal: Apr 2008
Messaggi: 86
[JAVA] Jtable come fare la prima colonna colorata

Ciao, sono un po di giorni che mi metto su questo punto del codice ma non riesco a capire come si puo fare ad ottenere la prima colonna di sinistra nello stesso modo degli header delle colonne, quindi in grigio e non editabili.. tipo

String[] columnNames = { "a", "b", "c" };

nel mio caso ho nell prima colonna questi valori:

Object[][] dataShift;

dataShift[i][0] = i+1;

vorrei renderli quindi come quelli degli header.


Queste jtable... sono complicatuccie direi
federico100mt è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2009, 09:54   #2
federico100mt
Member
 
Iscritto dal: Apr 2008
Messaggi: 86
nessuno riesce a darmi uno spunto???

tipo un sistema piu semplice per ottenere almeno una cosa simile...
federico100mt è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2009, 13:15   #3
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Incollo un esempio commentato.

Codice:
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;

public class Main {
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				new FrameManager().show();
			}
		});
	}
}

class FrameManager {
	private JFrame frame;
	
	FrameManager() {
		frame = new JFrame("Table Test");
		frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		
		JTable table = new CustomTable(8, 8);
		JScrollPane scroller = new JScrollPane(table);
		frame.add(scroller, BorderLayout.CENTER);
	}
	
	void show() {
		frame.pack();
		frame.setVisible(true);
	}
}

class CustomTable extends JTable {
	
	/* Istanza del particolare renderer che colora lo sfondo di una cella in modo
	diverso dal normale. Questa istanza sarà restituita, a certe condizioni, nel
	metodo getCellRenderer(int, int). */
	private TableCellRenderer customRenderer = new CustomRenderer();
	
	CustomTable(int rowCount, int colCount) {
		super(rowCount, colCount);
	}
	
	/** Ridefinisco il metodo usato da swing per determinare se una cella in una
	tabella sia o meno "modificabile". La mia definizione dice che se la cella si
	trova nella colonna zero allora la cella stessa non deve poter essere modificata.
	Se la cella sta su un'altra colonna allora lascio la decisione alla definizione
	standard (super.isCellEditable) di questo metodo. */
	public boolean isCellEditable(int row, int column) {
		if(column == 0) {
			return false;
		} else {
			return super.isCellEditable(row, column);
		}
	}

	/** Ridefinisco il metodo getCellRenderer di questo tipo di JTable in modo
	che restituisca per la prima colonna non il renderer standard ma un
	particolare tipo di renderer, CustomRenderer, che mostrerà il contenuto della
	cella secondo parametri particolari (nel nostro caso con un certo colore di
	sfondo */
	public TableCellRenderer getCellRenderer(int row, int column) {
		/* row e column sono le "coordinate" della cella per le quali è richiesto
		il renderer.*/
		
		/* se la cella è una di quelle che si trova nella prima colonna... */
		if(column == 0) {
			
			/* allora il renderer che swing dovrà usare è il mio, quello che
			colora lo sfondo della cella come dico io */
			return customRenderer;
		} else {
			
			/* altrimenti va bene il renderer predefinito */
			return super.getCellRenderer(row, column);
		}
	}
}

class CustomRenderer extends DefaultTableCellRenderer {
	
	/* metodo usato dal sistema di disegno delle tabelle per definire l'aspetto grafico di ciò che
	quella cella contiene. Restituisce un Component ma è bene ricordare che il Component restituito non
	è soggetto alle normali regole di layout e interazione. In pratica il component restituito è usato
	solo per disegnare "value". */
	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
		Component predefinedComponent = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
		Color headerBackground = table.getTableHeader().getBackground();
		predefinedComponent.setBackground(headerBackground);
		return predefinedComponent;
	}
}
Questo risolve il problema del colore e dell'insensibilità all'interazione di certe celle.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2009, 13:49   #4
federico100mt
Member
 
Iscritto dal: Apr 2008
Messaggi: 86
grazie mille!
federico100mt è offline   Rispondi citando il messaggio o parte di esso
Old 09-03-2009, 10:36   #5
federico100mt
Member
 
Iscritto dal: Apr 2008
Messaggi: 86
Buon giorno,

in seguito a questa modifica apportata, andata praticamente a buon fine, non riesco a far si che il contenuto nelle celle della prima colonna di cui ho cambiato, sia di interi allineati a destra, ora mi da tutti double allineati a sinistra perche?

come posso dirgli, alla colonna, voglio solo interi allineati a destra?

grazie...
federico100mt è offline   Rispondi citando il messaggio o parte di esso
Old 09-03-2009, 13:27   #6
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Una tabella swing "normale" sceglie un renderer ad hoc se le colonne hanno valori tipici (i predefiniti sono stringhe, numeri, boolean). La scelta si basa sulla classe degli oggetti contenuti nella colonna.

Il nostro codice bypassa quella scelta.

Ci sono più soluzioni, io ritengo che la più opportuna passi per la definizione completa di un renderer - anzichè un parziale riciclaggio del renderer DefaultTableCellRenderer.

La faccenda ha una soluzione relativamente rapida. Ad esempio:

Codice:
final class CustomRenderer extends JLabel implements TableCellRenderer {
	
	CustomRenderer() {
		setOpaque(true);
		
		/* il testo è mostrato da questa etichetta - e, quindi, il testo mostrato
		dalle celle che usano questo TableCellRenderer come proiettore del contenuto -
		è sempre allineato a destra */
		setHorizontalAlignment(JLabel.RIGHT);
	}
	
	/* metodo usato dal sistema di disegno delle tabelle per definire l'aspetto grafico di ciò che
	quella cella contiene. Restituisce un Component ma è bene ricordare che il Component restituito non
	è soggetto alle normali regole di layout e interazione. In pratica il component restituito è usato
	solo per disegnare "value". */
	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
		/* determina il testo da mostrare su questa etichetta. Se il valore della cella è un numero usa il valore
		intero di quel numero, altrimenti converte il valore in stringa. */
		String text;
		if(value instanceof Number) {
			Number n = (Number)value;
			text = String.valueOf(n.longValue());
		} else {
			text = String.valueOf(value);
		}
		
		/* imposta il testo su determinato come testo di questa etichetta - e, quindi, come valore mostrato dalla
		tabella nella cella di cui questo TableCellRenderer è proiettore. */
		setText(text);
		
		/* Lo sfondo della cella è sempre del colore di sfondo dell'intestazione della tabella. */
		Color headerBackground = table.getTableHeader().getBackground();
		
		return this;
	}
}
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 09-03-2009, 14:00   #7
federico100mt
Member
 
Iscritto dal: Apr 2008
Messaggi: 86
sto imparando a manetta, ti ringrazio, ma quest jtable sbaglio o sono rognose?
federico100mt è offline   Rispondi citando il messaggio o parte di esso
Old 09-03-2009, 14:21   #8
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
La questione è un po' più sottile dell'essere o meno rognosi .

A parità di prospettiva l'uso di una tabella è complesso quanto l'uso di un'etichetta.

Considera come usi una JLabel: prendi un'informazione fatta di più parti (una stringa è fatta di tanti caratteri), la consideri atomicamente, la piazzi nell'etichetta e via.

Una tabella funziona allo stesso modo: prendi un'informazione complessa (una griglia di dati), la consideri atomicamente, la piazzi nella tabella e via.

L'attività cambia quando l'informazione complessa non è più considerata come un "pacchetto unitario": se consideri i dati della tabella come divisi in due parti, allora è necessaria una bipartizione dell'attività svolta dalla tabella.

Per intenderci, quanto sarebbe "semplice" una JLabel se volessimo rappresentare un sottoinsieme dei caratteri della stringa in modo diverso dagli altri?

Dunque io direi no, le tabelle non sono più rognose di un qualsiasi altro componente swing.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo Recensione Samsung Galaxy S26 Ultra: finalmente ...
Diablo II Resurrected: il nuovo DLC Reign of the Warlock Diablo II Resurrected: il nuovo DLC Reign of the...
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup Deep Tech Revolution: così Area Science P...
HP OMEN MAX 16 con RTX 5080: potenza da desktop replacement a prezzo competitivo HP OMEN MAX 16 con RTX 5080: potenza da desktop ...
Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta Recensione Google Pixel 10a, si migliora poco ma...
MacBook Neo sorprende iFixit: 'Non vedev...
Venus Optics presenta due nuovi obiettiv...
AMD pubblica una guida per eseguire Open...
Tomb Raider I-III Remastered arriva su A...
X fa marcia indietro: si adeguerà...
Framework e la crisi delle memorie: terz...
Doom è ovunque: perché il ...
NVIDIA aggiorna G-Sync Pulsar: migliorat...
Portatile gaming con RTX 5060 a 1.099€: ...
6G for dummies: al MWC 2026 il CEO di Qu...
Le RAM tornano a salire di prezzo: quest...
5 robot aspirapolvere bestseller al mini...
A 59 anni il mio primo hackathon: dieci ...
Come sfruttare le Offerte di Primavera p...
NVIDIA promette un salto enorme: path tr...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 06:23.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v