Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
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


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
La Serie A con DAZN e Amazon Prime con l...
Giochi Ubisoft su Steam senza Ubisoft Co...
Miami Beach ha autorizzato la maxi opera...
Apple regala un altro anno di funzioni s...
Alla fine è successo davvero: Vol...
Il meglio di Amazon del weekend in uno s...
Speciale TV in offerta su Amazon: Hisens...
Non c'è pace per Trezor: 347.000 e-mail ...
È un portatile Dell e li vale tut...
Apple iPhone 17 Pro Max 256GB a 1.195€ (...
GPT-6 Astra è davvero AGI o non s...
LG OLED G6S 48'' a 845€ e G6 55'' a 1368...
Mantax Otax: il malware Android che crip...
Musk incassa un altro maxi contratto IA:...
Le vendite di EV sono esplose in tutto i...
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:54.


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