Torna indietro   Hardware Upgrade Forum > Software > Programmazione

MSI Maestro 500 Wireless: ANC e 90 ore di autonomia a 70 euro
MSI Maestro 500 Wireless: ANC e 90 ore di autonomia a 70 euro
Wireless 2.4 GHz, Bluetooth 5.4, cancellazione attiva del rumore, design pieghevole e un'autonomia che mette in imbarazzo prodotti che costano il doppio. Le Maestro 500 non eccellono in nulla, ma offrono tutto. E a questo prezzo è difficile chiedere di più
NL-LC1 è il primo dissipatore a liquido AIO di Noctua: silenzio è la parola d'ordine
NL-LC1 è il primo dissipatore a liquido AIO di Noctua: silenzio è la parola d'ordine
Dopo anni di attesa e una lunga fase di sviluppo, Noctua entra nel mercato dei dissipatori a liquido AIO con la nuova serie NL-LC1. Forte dell'esperienza maturata nel raffreddamento ad aria, l'azienda austriaca promette di portare la propria filosofia fatta di qualità costruttiva, attenzione ai dettagli e silenziosità anche in questo segmento. Abbiamo provato il nuovo sistema per scoprire se riesce a distinguersi in un mercato ormai molto competitivo.
Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con Android 15 e penna, dal prezzo super
Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con Android 15 e penna, dal prezzo super
Arrivato sul mercato italiano a fine marzo, la serie Boox Go 10.3 (Gen II) offre Android 15, penna da 4096 livelli e retroilluminazione opzionale (nel modello da noi provato, Lumi, presente). La serie si compone di due tablet ePaper che fanno da e-reader, blocco note digitale e persino browser, tutto a un prezzo che fa dimenticare i prodotti di brand più blasonati
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


MSI Maestro 500 Wireless: ANC e 90 ore di autonomia a 70 euro MSI Maestro 500 Wireless: ANC e 90 ore di autono...
NL-LC1 è il primo dissipatore a liquido AIO di Noctua: silenzio è la parola d'ordine NL-LC1 è il primo dissipatore a liquido A...
Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con Android 15 e penna, dal prezzo super Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con ...
Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming Gigabyte MO32U24 OLED: il 4K a 240Hz su un panne...
Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh Recensione realme 16 5G: lo smartphone con Selfi...
Gwynne Shotwell (presidente di SpaceX): ...
ISRO lancerà il primo modulo della stazi...
Lo sfondo animato del tuo PC potrebbe es...
Dopo la RAM, Framework annuncia l'aument...
Google Home Speaker ufficiale: è il prim...
Spotify: i nomi utente stanno per divent...
Il limite vero dei data center AI sono g...
AMD conferma i nuovi Threadripper: Zen 6...
Stop all'ADSL per WindTre: continua la m...
HPE punta sull'IA agentica e dichiara gu...
macOS avvisa quando si incolla un comand...
Everpure ridisegna lo storage per l’IA: ...
NVIDIA RTX Remix 1.5: realizzare remaste...
Come configurare Windows 11 like a pro, ...
Windows 11 cambia finalmente la gestione...
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: 04:41.


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