Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro
Le Jabra Evolve3 85 non sono semplicemente cuffie Bluetooth con cancellazione del rumore. Sono un dispositivo professionale pensato per chi trascorre gran parte della giornata in riunione, al telefono o davanti a un assistente basato sull'intelligenza artificiale
MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi
MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi
Abbiamo provato MSI PRO MAX EDGE AI+, un mini-PC professionale progettato per eseguire modelli di intelligenza artificiale in locale, senza dipendere dal cloud. Il sistema abbina il processore AMD Ryzen AI Max+ 395, 128 GB di memoria unificata e un telaio in alluminio da appena 4 litri, con l'obiettivo di offrire capacità di elaborazione elevate in un formato compatto.
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista
Il nuovo top di gamma vivo punta su un comparto fotografico particolarmente articolato, con un teleobiettivo da 200 megapixel e teleconvertitori esterni capaci di arrivare a 400 mm equivalenti. Lo abbiamo provato a Tenerife, mettendo alla prova fotocamere, prestazioni, autonomia e accessori. Ecco come si è comportato.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 01-12-2006, 17:52   #1
spv42
Member
 
Iscritto dal: Sep 2005
Messaggi: 274
TableModel

Ma con il TableModel è possibile creare una tabella vuota, cioè visualizzare solo celle vuote? (Ad esempio 5 righe vuote)

Io facendo cosi:
mytablemodel.addcolumn("Colonna1");
mytablemodel.addcolumn("Colonna2");

creo una tabella vuota, senza neanche una riga.

spv42 è offline   Rispondi citando il messaggio o parte di esso
Old 01-12-2006, 18:05   #2
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
C'è addRow. Se usi "null" come argomento, crea una riga vuota. Non puoi dirgli direttamente "null" perchè "null" è compatibile con ogni riferimento, di addRow ce ne sono due e il compilatore ti dirà "che cavolo stai dicendo, willis!" (signore fa che non sia così vecchio da essere il solo a ricordarmi di Arnold ).

Hai un DefaultTableModel myTableModel, ottenuto dal costruttore senza argomenti.

Due colonne, come hai perfettamente già fatto:

myTableModel.addColumn("Colonna1");
myTableModel.addColumn("Colonna2");

e cinque righe, vuote:

Object[] NO_DATA = null;
myTableModel.addRow(NO_DATA);
myTableModel.addRow(NO_DATA);
myTableModel.addRow(NO_DATA);
myTableModel.addRow(NO_DATA);
myTableModel.addRow(NO_DATA);

et voilà.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 01-12-2006, 18:09   #3
spv42
Member
 
Iscritto dal: Sep 2005
Messaggi: 274
Quote:
Originariamente inviato da PGI-Bis
C'è addRow. Se usi "null" come argomento, crea una riga vuota. Non puoi dirgli direttamente "null" perchè "null" è compatibile con ogni riferimento, di addRow ce ne sono due e il compilatore ti dirà "che cavolo stai dicendo, willis!" (signore fa che non sia così vecchio da essere il solo a ricordarmi di Arnold ).

Hai un DefaultTableModel myTableModel, ottenuto dal costruttore senza argomenti.

Due colonne, come hai perfettamente già fatto:

myTableModel.addColumn("Colonna1");
myTableModel.addColumn("Colonna2");

e cinque righe, vuote:

Object[] NO_DATA = null;
myTableModel.addRow(NO_DATA);
myTableModel.addRow(NO_DATA);
myTableModel.addRow(NO_DATA);
myTableModel.addRow(NO_DATA);
myTableModel.addRow(NO_DATA);

et voilà.
Non Sei l'unco "Vecchio da ricordare Arnold"

Sei Sempre puntuale come un orologio svizzero!

Grazie!
spv42 è offline   Rispondi citando il messaggio o parte di esso
Old 01-12-2006, 18:12   #4
spv42
Member
 
Iscritto dal: Sep 2005
Messaggi: 274
Ma in questo modo posso fare:

table.setRowSelectionInterval (0, 0);
table.setColumnSelectionInterval (0, 0);


table.editCellAt (0, 0);
table.setRowSelectionAllowed (true);
table.setColumnSelectionAllowed (true);
table.setSelectionMode (ListSelectionModel.SINGLE_SELECTION);

In modo da editare una cella alla volta, stile Excel???
spv42 è offline   Rispondi citando il messaggio o parte di esso
Old 01-12-2006, 18:55   #5
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Se vuoi selezionare la cella e non la riga, cioè la cella assume il bordo "selezione" ma la riga a cui appartiene non viene illuminata, penso basti:

jtable.setRowSelectionAllowed(false);

i due metodi "interval" servono per la selezione programmatica di una cella. Tipo "clicco sul pulsante x e la cella abc della tabella viene selezionata".
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 01-12-2006, 19:12   #6
spv42
Member
 
Iscritto dal: Sep 2005
Messaggi: 274
E' proprio quello che voglio, solo una cella che mi si "illumini" e mi dia la possibilità di inserirci dei valori al suo interno!
spv42 è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2006, 09:44   #7
spv42
Member
 
Iscritto dal: Sep 2005
Messaggi: 274
Ok, Il Mio TableModel Funziona, ora riesco a non far inserire nella colonna che volevo!

Ora però vorrei che le celle di quella colonna non mi si "illuminassero".

Come posso fare?
spv42 è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2006, 14:28   #8
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
In che senso "far inserire nella colonna che volevo"?

In una JTable per inserire i dati l'utente fa doppio click su una cella, digita e preme invio oppure digita e preme invio. Nel secondo caso l'inserimento avviene nella cella attualmente selezionata.

In entrambi i casi è l'utente che sceglie la colonna – quella a cui appartiene la cella selezionata.

Mi sembra che tu stia cercando una terza via che è più che lecito ma forse mi sfugge quale sia. Cosa vuoi fare a questa tabella? E non dire Excel, perchè io uso OpenOffice .

L'illuminazione delle celle appartenenti ad una colonna può essere disattivata con jtable.setColumnSelectionAllowed(false).

L'illuminazione delle celle appartenti ad una colonna ha un effetto "tipico" solo se la corrispondente illuminazione delle celle appartenenti ad un riga sia disattivata.

Comunque, poichè sono tutti colori applicati dal proiettore delle celle, che cosa capiti controllando quei due valori dipende dal TableCellRenderer.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2006, 14:42   #9
spv42
Member
 
Iscritto dal: Sep 2005
Messaggi: 274
Quote:
Originariamente inviato da PGI-Bis
In che senso "far inserire nella colonna che volevo"?

In una JTable per inserire i dati l'utente fa doppio click su una cella, digita e preme invio oppure digita e preme invio. Nel secondo caso l'inserimento avviene nella cella attualmente selezionata.
Io su alcune colonne volevo disattivare L'editing!!! E grazie al tuo aiuto ci sono riuscito!

Quote:
Originariamente inviato da PGI-Bis
L'illuminazione delle celle appartenenti ad una colonna può essere disattivata con jtable.setColumnSelectionAllowed(false).
Però cosi facendo viene applicato a tutte le colonne del Jtable!, io lo voglio applicare solo sulla prima colonna!
spv42 è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2006, 15:24   #10
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Cioè una cosa di questo tipo?

PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2006, 15:45   #11
spv42
Member
 
Iscritto dal: Sep 2005
Messaggi: 274
Esatta la terza immagine!!!

Sulla 1° colonna non si può editare e non deve essere illuminata.

Quindi se sono sulla cella B0 e premo Tab non devo andare sulla A1 ma sulla B1!!
spv42 è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2006, 16:00   #12
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Ahhhhhhhhh!

Pensavo a tutt'altro (anche quando ho fatto gli screenshot).

Usa due tabelle per lo stesso tablemodel. La prima immutabile, la seconda modificabile. La prima proietta il contenuto della prima colonna del modello. La seconda proietta il contenuto delle colonne seguenti la prima. Le affianchi e sei a cavallo.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2006, 16:09   #13
spv42
Member
 
Iscritto dal: Sep 2005
Messaggi: 274


Mica ti ho capito!!!
spv42 è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2006, 17:03   #14
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Insomma, ci capiamo alla perferzione .

Diciamo che quello che vuoi fare è questo:



Le immagini si riferisco a ciò che succede quanto l'utente preme "tab". Si può fare in tanti modi ma quello che mi pare più semplice è questo.

Codice:
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.table.*;
import javax.swing.event.*;
import java.awt.event.*;
import java.util.*;

public class Main implements Runnable {
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Main());
	}

	private JFrame frame;

	public Main() {
		Object[] no = null;
		/** Questo è il modello reale */
		DefaultTableModel model = new DefaultTableModel();
		model.addColumn("A");
		model.addColumn("B");
		model.addColumn("C");
		model.addRow(no);
		model.addRow(no);
		model.addRow(no);
		model.addRow(no);
		model.addRow(no);

		/** Questo è un modello associato alla prima colonna
		del modello reale */
		LeftModel leftModel = new LeftModel(model);

		/** Questo è un modello associato alle colonne successive
		del modello reale */
		RightModel rightModel = new RightModel(model);

		/** Questa è la tabella della parte sinistra (colonna 0) */
		JTable leftTable = new JTable(leftModel);
		/** Che non è interattiva */
		leftTable.setEnabled(false);

		/** Questa è la tabella della parte destra (colonne da 1
		in poi) */
		JTable rightTable = new JTable(rightModel);

		/** In cui la selezione illumina la sola cella selezionata */
		rightTable.setColumnSelectionAllowed(true);
		rightTable.setRowSelectionAllowed(true);

		/** Questo è il contenitore delle due tabelle, che le
		fa sembrare una tabella unica */
		JPanel tableContainer = new JPanel(new BorderLayout());
		tableContainer.add(leftTable, BorderLayout.WEST);
		tableContainer.add(rightTable, BorderLayout.CENTER);

		/** Questo è il contenitore delle intestazioni delle due tabelle
		che fa apparire l'intestazione unica */
		JPanel tableHeaderContainer = new JPanel(new BorderLayout());
		tableHeaderContainer.add(leftTable.getTableHeader(), BorderLayout.WEST);
		tableHeaderContainer.add(rightTable.getTableHeader(), BorderLayout.CENTER);

		/** Infila nello scroller il contenitore delle due tabelle */
		JScrollPane scroller = new JScrollPane(tableContainer);

		/** Visualizza le intestazioni delle tabelle */
		scroller.setColumnHeaderView(tableHeaderContainer);
		JFrame window = new JFrame("Window");
		window.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		window.add(scroller);
		frame = window;
	}

	public void run() {
		frame.pack();
		frame.setVisible(true);
		System.out.println(frame.getSize());
	}
}

/** Modello per la tabella di destra (colonna zero) */
class RightModel implements TableModel {
	/* Modello che contiene i dati della tabella */
	private TableModel model;

	public RightModel(TableModel model) {
		this.model = model;
	}	

	public void addTableModelListener(TableModelListener l) {
		model.addTableModelListener(l);
	}

	public Class<?> getColumnClass(int columnIndex) {
		return model.getColumnClass(columnIndex + 1);
	}

	public int getColumnCount() {
		return model.getColumnCount() - 1;
	}

	public String getColumnName(int columnIndex) {
		return model.getColumnName(columnIndex + 1);
	}

	public int getRowCount() {
		return model.getRowCount();
	}

	public Object getValueAt(int row, int col) {
		return model.getValueAt(row, col + 1);
	}

	public boolean isCellEditable(int row, int col) {
		return model.isCellEditable(row, col + 1);
	}

	public void removeTableModelListener(TableModelListener l) {
		model.removeTableModelListener(l);
	}

	public void setValueAt(Object v, int row, int col) {
		model.setValueAt(v, row, col + 1);
	}
}

/** Modello per la tabella di destra (colonne da 1 a columnCount - 1)*/
class LeftModel implements TableModel {
	private TableModel model;

	public LeftModel(TableModel model) {
		this.model = model;
	}	

	public void addTableModelListener(TableModelListener l) {
		model.addTableModelListener(l);
	}

	public Class<?> getColumnClass(int columnIndex) {
		return model.getColumnClass(columnIndex);
	}

	public int getColumnCount() {
		return 1;
	}

	public String getColumnName(int columnIndex) {
		return model.getColumnName(columnIndex);
	}

	public int getRowCount() {
		return model.getRowCount();
	}

	public Object getValueAt(int row, int col) {
		return model.getValueAt(row, col);
	}

	public boolean isCellEditable(int row, int col) {
		return model.isCellEditable(row, col);
	}

	public void removeTableModelListener(TableModelListener l) {
		model.removeTableModelListener(l);
	}

	public void setValueAt(Object v, int row, int col) {
		model.setValueAt(v, row, col);
	}
}
Anzichè una tabella per un modello crei due tabelle per due modelli dove i due modelli propongono alla tabella due parti diverse dell'unico modello reale.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2006, 18:25   #15
spv42
Member
 
Iscritto dal: Sep 2005
Messaggi: 274
Grazie, era prioprio quello che volevo!

Sei Proprio un Fenomeno!

Visto che siamo entrati così in "sintonia",....

Ora avrei bisogno che se mi trovo nella cella C4, premendo tab, il tabelModel mi aggiunga una riga vuota e naturalmente si posizionasse sulla cella B5!!

Devo associare un Action alla colonna C??? Come si fà?

P.S. Ma c'è un totorial più avanzato sulle Jtable, di quello della SUn?

Tu dove hai studiato?
spv42 è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2006, 14:46   #16
spv42
Member
 
Iscritto dal: Sep 2005
Messaggi: 274
Up!
spv42 è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2006, 15:41   #17
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Aggiungi un KeyListener alla tabella. Nel suo KeyPressed, quando il codice del tasto è KeyEvent.VK_TAB e la riga/colonna corrente corriponde alla cella che vuoi tu, aggiungi al modello della tabella una riga (il modello "vero").

Supponendo che "table" sia la tabella e "dataModel" il DefaultTableModel che contiene i dati, il KeyListener potrebbe essere:

Codice:
	private KeyListener tabHandler = new KeyAdapter() {
		public void keyPressed(KeyEvent e) {
			if(e.getKeyCode() == KeyEvent.VK_TAB) {
				int row = table.getSelectedRow();
				int col = table.getSelectedColumn();
				if(row == 4 && col == 1) {
					Object[] NULL = null;
					dataModel.addRow(NULL);
				}
			}
		}
	};
E' un po' bizzarro che sia propio la C4 a scatenare questo evento ma avrai le tue ottime ragioni per farlo.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2006, 18:55   #18
spv42
Member
 
Iscritto dal: Sep 2005
Messaggi: 274
Quote:
Originariamente inviato da PGI-Bis
E' un po' bizzarro che sia propio la C4 a scatenare questo evento ma avrai le tue ottime ragioni per farlo.

No, perchè ti sembra fantasioso?
Devo aggiungere delle righe solo se riempio le prime 5 righe!!

Grazie Ancora!

Conosci un sito per un buon tutorial sulle JTable?
spv42 è offline   Rispondi citando il messaggio o parte di esso
Old 06-12-2006, 15:43   #19
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Non fantasioso, strano. Strano per due ragioni, frutto di una delle incomprensione a cui siamo ormai abituati

Non la cella C4 in sè attiva l'inserimento di una nuova riga ma più generalmente l'ultima cella dell'ultima riga.

La seconda, più rilevante, è che l'associazione di più funzioni ad un unico controllo può rendere equivoca l'interazione utente nella misura in cui vari il contesto che determina la produzione dell'uno o dell'altro effetto.

Abbiamo hai un tasto tab che sulla stessa tabella fa due cose: scorre il focus tra le celle e determina una mutazione della struttura della tabella.

L'utente si impappinerà? E possibile che vada tutto liscio. Principalmente perchè se la cella "sensibile" è sempre l'ultima allora la condizione che determina la mutazione di risultato ha un'identità visuale diretta e primitiva (ciò che corrisponde ai concetti di posizione a destra di, a sinistra di, in fondo a, in cima a, rispetto ad un entità interamente visibile).

Certo in linea di principio la sovrapposizione andrebbe evitata ma comprendo (o fraintendo ) la necessità di simulare una tabella dotata di un numero indeterminato di righe.

Non conosco siti che trattino le JTable oltre i concetti di base e non ho esperienza diretta di libri che lo facciano ma ho sentito di un tomo il cui titolo potrebbe suonare "Advanced Swing" o simili che si concentra sulle tabella. Devo dire però che col tempo ho imparato a diffidare di ciò che taluni autori intendono per "Advanced" .
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro Jabra Evolve3 85: le cuffie sia per l'intratteni...
MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB...
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista Recensione vivo X500 Pro Max: la fotografia mobi...
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà WoW Forever: la beta è stato uno dei mome...
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA Oracle AI World 2026: in Europa prima la sovrani...
iPhone: il redesign dei 20 anni sarà inn...
OpenAI sfida GitHub acquisendo Pierre Co...
Novità ai vertici di HP: Emma Wal...
Pudu Robotics apre la sede europea : un ...
Meta compra Conductor, la startup degli ...
ASUS ExpertBook A7: disponibile in Itali...
Il film di Naruto si farà davvero: Sony ...
Motorola porta il suono Bose su moto bud...
Motorola presenta moto watch 2 fit: tecn...
motorola signature 27 ufficiale! Il top ...
Dreame L60 Ultra CE a 799€ su Amazon: 35...
DJI Matrice 5T: nuovo drone enterprise c...
iOS 27.3 e gli altri nuovi OS cambiano l...
ECOVACS T90 MAX OMNI crolla a 389€ su Am...
Switch 2 rallenta dopo i rincari: 2,67 m...
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: 19:21.


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