Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare
A New York HP ha messo al centro della scena HP IQ, la piattaforma di IA locale da 20 miliardi di parametri. L’abbiamo vista in funzione: è uno strumento che funziona, pensato per un target specifico, con vantaggi reali e limiti altrettanto evidenti
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è
La PNY GeForce RTX 5080 Slim OC si distingue nel panorama delle GPU di fascia alta per il design compatto a due slot, ispirato alla NVIDIA GeForce RTX 5080 Founders Edition. In questo test analizziamo comportamento termico e prestazioni in gioco, valutando se il formato ridotto comprometta o meno l'esperienza complessiva rispetto alle soluzioni più ingombranti presenti sul mercato.
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei
HUAWEI WiFi Mesh X3 Pro Suite è probabilmente il router mesh più fotogenico che si possa acquistare oggi in Italia, ma dietro il guscio in acrilico trasparente e le luci LED dinamiche c'è una macchina tecnica costruita attorno allo standard Wi-Fi 7, con velocità teoriche Dual-Band fino a 3,6 Gbps e una copertura fino a 120 m² una volta abbinato il router principale all'extender incluso nel kit
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 24-10-2006, 16:11   #1
julianross1983
Junior Member
 
Iscritto dal: Oct 2006
Messaggi: 25
[JAVA] Jpanel come cella di JTable?

Sarebbe possibile inserire come cella di una JTable una JPanel?
julianross1983 è offline   Rispondi citando il messaggio o parte di esso
Old 24-10-2006, 16:22   #2
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Si.

Ciò che appare come cella di un JTable è il prodotto dell'applicazione del metodo getTableCellRendererComponent al contenuto di quella cella. Se il contenuto della cella è un JPanel il proiettore, che definisce il metodo in esame, può limitarsi a restituire quel JPanel.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 24-10-2006, 18:15   #3
julianross1983
Junior Member
 
Iscritto dal: Oct 2006
Messaggi: 25
esempio

Un esempio tipico?Ho notato parecchie classi che bisogna modificare o gestire?grazie tante
julianross1983 è offline   Rispondi citando il messaggio o parte di esso
Old 24-10-2006, 19:19   #4
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Pronti!.

Faccio un esempio di proiezione di un pannello.

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

public class Main {
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				start();
			}
		});
	}
	
	private static void start() {
		/* Crea il pannello che andrà nella cella (1,1) */
		JPanel panel = new JPanel();
		panel.setBorder(BorderFactory.createLoweredBevelBorder());
		panel.setBackground(Color.PINK);
		panel.setOpaque(true);
		/* Dati usati dalle righe della tabella */
		Object[][] tableData = {
			{ "Pino", "Beppe" },
			{ "Giusi", panel },
		};
		/* Intestazioni delle colonne della tabella */
		Object[] tableHeaders = {
			"A", "B",
		};
		/* Crea il modello della tabella */
		TableModel tableModel = new DefaultTableModel(tableData, tableHeaders);
		/* Crea la tabella */
		JTable table = new CustomTable();
		/* Assegna un modello alla tabella */
		table.setModel(tableModel);
		/* Mette la tabella in un pannello a scorrimento */
		JScrollPane tableScroller = new JScrollPane(table);
		/* Crea la finestra, aggiunge il pannello a scorrimento che contiene la
		tabella al pannello del contenuto della finestra e spara quest'ultima
		sullo schermo */
		JFrame window = new JFrame("PanelRenderer Sample");
		window.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		window.add(tableScroller, BorderLayout.CENTER);
		window.pack();
		window.setVisible(true);
	}
}

/** Proietta il contenuto delle celle della tabella */
class PanelRenderer extends DefaultTableCellRenderer {
	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
	{
		/* value è il valore conservato nel modello della tabella in corrispondenza
		della cella (row, column). Se quel valore è un JPanel restituisco direttamente
		quel JPanel come vista del contenuto, altrimenti uso la definizione standard di
		questo metodo */
		return value instanceof JPanel ?
			(JPanel)value :
			super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
	}
}

/** Ridefinisce il metodo getCellRenderer in modo che restituisca un
PanelRenderer per la cella (1,1) */
class CustomTable extends JTable {
	private PanelRenderer panelRenderer = new PanelRenderer();
	
	/** Tutto standard tranne il caso in cui la cella sia la (1,1): lì deve
	esserci un JPanel e per quella cella restituisco un proiettore ad hoc */
	public TableCellRenderer getCellRenderer(int row, int column) {
		return row == 1 && column == 1 ?
			panelRenderer :
			super.getCellRenderer(row, column);
	}
	
	/** Questo metodo è invocato quando un certo tipo di interazione utente
	segnali un tentativo di mutare il valore di una cella della tabella. Rendiamo
	il valore della cella (1,1) "non interagibile". Per tutti gli altri rinviamo
	al meccanismo standard. */
	public boolean isCellEditable(int row, int column) {
		return row == 1 && column == 1 ?
			false :
			super.isCellEditable(row, column);
	}
}
Noterai che il pannello assume le dimensioni delle altre celle e che, per esplicita volontà, non è passibile di interazione. Per le dimensioni passi per i metodi getRowHeight(int row) di JTable e getColumnWidth(int col) di JTableHeader. Per l'interazione crei un tuo TableCellEditor.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 24-10-2006, 20:39   #5
julianross1983
Junior Member
 
Iscritto dal: Oct 2006
Messaggi: 25
grazie mille

sei davvero un grande!
julianross1983 è offline   Rispondi citando il messaggio o parte di esso
Old 26-10-2006, 11:34   #6
julianross1983
Junior Member
 
Iscritto dal: Oct 2006
Messaggi: 25
Nella cella della JTable ho un oggetto complesso (Plane) composto da: un JPanel che contiene 3 JLabel....ora...vorrei poter gestire il drag and drop tra le JLabel di due oggetti Plane contenuti nella JTable.E' possibile?e quali metodi bisogna gestire..grazie
julianross1983 è offline   Rispondi citando il messaggio o parte di esso
Old 26-10-2006, 15:41   #7
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Non è difficile ma potrebbe richiede un po' di maneggiamenti.

Io proverei ad associare il drag and drop alla tabella. Gli eventi di trascinamento e rilascio iniziano e finiscono in un "Point". Attraverso quel Point puoi risalire alla cella della tabella in cui il rilascio inizia o termina. Banalmente, per il drag, se il punto corrisponde ad una cella che contiene un valore JPanel e, fatte le opportune conversioni dell'origine degli assi, in quel punto il JPanel ha un'etichetta, inizi il trascinamento – spostando l'etichetta o la stringa... quello che devi trascinare.

Lo stesso vale per il rilascio. Se nel punto di rilascio c'è una cella il cui valore è un JPanel e, fatte le opportune conversioni, in quel punto del pannello c'è un'etichetta, rilasci... quello che devi rilasciare.

Alternativamente puoi far si che il controllo passi al JPanel contenuto nella tabella alla pressione del mouse o al suo rilascio (lo stabilisci creando un TableCellEditor ad hoc). A quel punto gestisci il trascinamento e il rilascio direttamente dai JPanel. In teoria . Non so poi se possano esserci interferenze tra gli eventi del mouse che attivano la modifica di una cella e il fatto che gli stessi eventi debbano anche attivare le azioni di trascinamento e rilascio. Direi che questa seconda soluzione potrebbe essere un po' più complicata.

Ricorda che affinchè la tabella mostri il cambiamento di valori dovuti al drag and drop, dovrai dire alla tabella, passando per il suo modello, di ricaricare il contenuto delle celle interessate dal drag and drop.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 26-10-2006, 18:01   #8
julianross1983
Junior Member
 
Iscritto dal: Oct 2006
Messaggi: 25
NON RIESCO AD IMPLEMENTARE IL "TABLECELLEDITOR",PER GESTIRE IL TRASCINAMENTO DI UNA JLABEL CONTENUTA IN PANNELLO CHE A SUA VOLTA E' CONTENUTO IN UNA CELLA DI UNA JTABLE.....COME SI PUO' RISOLVERE?ESEMPIO!GRAZIE

Ultima modifica di julianross1983 : 29-10-2006 alle 23:22.
julianross1983 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare HP Imagine 2026: abbiamo visto HP IQ all’opera, ...
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è PNY RTX 5080 Slim OC, sembra una Founders Editio...
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei Wi-Fi 7 con il design di una vetta innevata: ecc...
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte Core Ultra 7 270K Plus e Core Ultra 7 250K Plus:...
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu PC Specialist Lafité 14 AI AMD: assemblat...
iPhone 18, il mistero sul destino della ...
Motorola lavora al nuovo Razr 70 Ultra: ...
Il programma di ridimensionamento di One...
L'industria statunitense non è co...
La NASA cambia strategia per le missioni...
Mike Fincke, l'astronauta che ha avuto u...
I Meta Ray-Ban Display potrebbero non ar...
La serie di God of War ha trovato l'attr...
Il nuovo iPhone Fold si farà atte...
Ex CEO di Intel furioso verso Wall Stree...
Un foglietto di rame e le prestazioni di...
100 agenti AI per dipendente: quello che...
Le 10 migliori offerte del weekend Amazo...
75'' e 85'' QD-Mini LED: 2 TV interessan...
Offerte Amazon sui componenti hardware P...
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: 17:10.


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