Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Le soluzioni FSP per il 2026: potenza e IA al centro
Le soluzioni FSP per il 2026: potenza e IA al centro
In occasione del Tech Tour 2025 della European Hardware Association abbiamo incontrato a Taiwan FSP, azienda impegnata nella produzione di alimentatori, chassis e soluzioni di raffreddamento tanto per clienti OEM come a proprio marchio. Potenze sempre più elevate negli alimentatori per far fronte alle necessità delle elaborazioni di intelligenza artificiale.
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS è il principale operatore di servizi cloud al mondo e da tempo parla delle misure che mette in atto per garantire una maggiore sovranità alle organizzazioni europee. L'azienda ha ora lanciato AWS European Sovereign Cloud, una soluzione specificamente progettata per essere separata e distinta dal cloud "normale" e offrire maggiori tutele e garanzie di sovranità
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Xiaomi ha portato sul mercato internazionale la nuova serie Redmi Note, che rappresenta spesso una delle migliori scelte per chi non vuole spendere molto. Il modello 15 Pro+ punta tutto su una batteria capiente e su un ampio display luminoso, sacrificando qualcosa in termini di potenza bruta e velocità di ricarica
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 24-10-2006, 17: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, 17: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, 19: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, 20: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, 21: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, 12: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, 16: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, 19: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 : 30-10-2006 alle 00:22.
julianross1983 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Le soluzioni FSP per il 2026: potenza e IA al centro Le soluzioni FSP per il 2026: potenza e IA al ce...
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa AWS annuncia European Sovereign Cloud, il cloud ...
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto Redmi Note 15 Pro+ 5G: autonomia monstre e displ...
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
AMD ha già risolto la crisi della...
La “batteria di Baghdad” funziona davver...
Pannelli solari al contrario? Non propri...
Google Gemini si espande: arrivano le es...
Mercato TV: la leadership di Samsung reg...
L'AI che lavora 100 volte più vel...
LIDAR, battaglia finale: MicroVision met...
Il 2025 è stato l'anno di BYD: +2...
L'IA enterprise entra nella fase decisiv...
Il tiktoker Khaby Lame cede la sua socie...
Apple Pencil Pro scende a 122€ su Amazon...
Ring in forte sconto su Amazon: videocit...
Blink torna a fare sul serio: Mini 2K+ c...
Edison aveva creato il grafene senza sap...
Reno15 Series: la nuova frontiera OPPO 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:57.


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