Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Un fulmine sulla scrivania, Corsair Sabre v2 Pro ridefinisce la velocità nel gaming
Un fulmine sulla scrivania, Corsair Sabre v2 Pro ridefinisce la velocità nel gaming
Questo mouse ultraleggero, con soli 36 grammi di peso, è stato concepito per offrire un'esperienza di gioco di alto livello ai professionisti degli FPS, grazie al polling rate a 8.000 Hz e a un sensore ottico da 33.000 DPI. La recensione esplora ogni dettaglio di questo dispositivo di gioco, dalla sua agilità estrema alle specifiche tecniche che lo pongono un passo avanti
Nokia Innovation Day 2025: l’Europa ha bisogno di campioni nelle telecomunicazioni
Nokia Innovation Day 2025: l’Europa ha bisogno di campioni nelle telecomunicazioni
Dal richiamo di Enrico Letta alla necessità di completare il mercato unico entro il 2028 alla visione di Nokia sul ruolo dell’IA e delle reti intelligenti, il Nokia Innovation Day 2025 ha intrecciato geopolitica e tecnologia, mostrando a Vimercate come la ricerca italiana contribuisca alle sfide globali delle telecomunicazioni
Sottile, leggero e dall'autonomia WOW: OPPO Reno14 F conquista con stile e sostanza
Sottile, leggero e dall'autonomia WOW: OPPO Reno14 F conquista con stile e sostanza
OPPO Reno14 F 5G si propone come smartphone di fascia media con caratteristiche equilibrate. Il device monta processore Qualcomm Snapdragon 6 Gen 1, display AMOLED da 6,57 pollici a 120Hz, tripla fotocamera posteriore con sensore principale da 50MP e generosa batteria da 6000mAh con ricarica rapida a 45W. Si posiziona come alternativa accessibile nella gamma Reno14, proponendo un design curato e tutto quello che serve per un uso senza troppe preoccupazioni.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 20-02-2010, 10:49   #1
bobby1112
Senior Member
 
Iscritto dal: May 2009
Messaggi: 366
[java] Modifica Jtable

salve ragazzi o questo problema ho una Jtable quando clicco su una cella mi compare una JList con degli elementi quando effettuo doppio click su uno degli elementi della jlist mi deve cambiare il valore della cella in JTable mi date qualche consiglio
__________________
visitate http://www.forumsenzacontro.altervista.org
bobby1112 è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2010, 12:47   #2
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Devi creare un tuo TableCellEditor e assegnarlo alla tabella per le celle che vuoi cambiare con quell'editor.

Ho sottomano un esempio in Scala ma è praticamente identico a quello che faresti in Java (le librerie son quelle, _ vale null, var e val sono campi, def sono metodi, il tipo è scritto a destra dopo i : anzichè a sinistra prima del nome, with = implements):

Codice:
import javax.swing._
import javax.swing.table._
import java.awt._
import java.awt.event._

object Main {

	def main(args:Array[String]) {
		EventQueue.invokeLater(new Runnable {
			def run = start()
		});
	}
	
	def start() {
	    val model = new DefaultTableModel()
	    model.addColumn("Nomi")
	    model.addColumn("Capitali")
	    model.addRow(Array[Object]("", ""))
	    model.addRow(Array[Object]("", ""))
	    val listEditor = new ListEditor() 
	    val table = new JTable(model) {
	        override def getCellEditor(row: Int, col: Int) = {
	            if(col == 1) listEditor else super.getCellEditor(row, col)
	        }
	    }
	    table.setRowHeight(Math.round(table.getRowHeight() * 1.5f))
	    val frame = new JFrame("Test")
	    frame.add(new JScrollPane(table))
	    frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE)
	    frame.pack()
	    frame.setVisible(true)
	}
}

class ListEditor extends AbstractCellEditor with TableCellEditor {
    private val list : JList = new JList(Array[Object]("Roma", "Atene", "Berlino"))
    private val component ; JScrollPane = new JScrollPane(list)
    private var oldValue : Object = _
    private var editorValue : Object = _
    
    list.addMouseListener(new MouseAdapter {
        override def mousePressed(e: MouseEvent) {
            /** Doppio click col sinistro */
            if(SwingUtilities.isLeftMouseButton(e) && e.getClickCount() == 2) {
                val index = list.locationToIndex(e.getPoint())
                if(index >= 0) {
                    editorValue = list.getModel().getElementAt(index)
                    fireEditingStopped()
                }
            }
        }
    })
    
    def getTableCellEditorComponent(table: JTable, value: Object, isSelected: Boolean, row: Int, column: Int) : Component = {
        oldValue = value
        editorValue = value
        list.setSelectedValue(oldValue, true)
        return component
    }
    
    def getCellEditorValue() : Object = {
        return editorValue
    }
    
    override def cancelCellEditing() : Unit {
        editorValue = oldValue
        fireEditingCanceled()
    }
    
    override def stopCellEditing() : Boolean = {
        val selection = Option(list.getSelectedValue)
        selection.foreach(v => editorValue = v)
        fireEditingStopped()
        return true
    }
}
Esteticamente viene meglio se usi una JComboBox al posto della JList. Il principio non cambia.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2010, 15:27   #3
bobby1112
Senior Member
 
Iscritto dal: May 2009
Messaggi: 366
ciao grazie dell' aito ma è da poco che ho a che fare con le Jtable e o qualche difficoltà

Quote:
if(col == 1) listEditor else super.getCellEditor(row, col)
qui per esempio non ho capito cosa fare con listEditor

poi
Quote:
def getTableCellEditorComponent(table: JTable, value: Object, isSelected: Boolean, row: Int, column: Int) : Component = {
oldValue = value
editorValue = value
list.setSelectedValue(oldValue, true)
return component
}
mi puoi spiegare un pò questa

Quote:
list.setSelectedValue(oldValue, true)
ti ringrazio
__________________
visitate http://www.forumsenzacontro.altervista.org
bobby1112 è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2010, 15:42   #4
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
La prima è nella sovrascrittura del metodo getCellEditor. Per ogni cella una JTable ha un certo editor - che sarebbe il componente che si occupa di modificare il contenuto di quella cella. JTable ha un paio di modi per personalizzare il tipo di editor che si vuole usare per certe celle. Uno è appunto la sovrascrittura di getCellEditor.

Quel

if(col == 1) listEditor else super.getCellEditor(row, col)

che sarebbe un:

Codice:
if(col == 1) {
    return listEditor;
} else {
   return super.getCellEditor(row, col)
}
dice che se la cella di cui si vuole cambiare il contenuto si trova nella seconda colonna allora l'editor da usare è il nostro, altrimenti deve usare quello predefinito. L'ho messo giusto per fare vedere, è ben possibile che tu abbia necessità diverse (magari più di una colonna oppore tutte le colonne o solo alcune righe, vedi tu, quel metodo ti permette di fare come preferisci).

Il secondo pezzo serve per far apparire il valore attualmente contenuto nella cella anche nell'editor.

Quando l'utente esprime la volontà di cambiare il contenuto di una cella - attraverso cliccamenti vari o che altro - la tabella prende il valore della cella e lo passa al metodo getTableCellEditorComponent - nel parametro value.

Nello stesso metodo l'editor si prepara a consentire la modifica della cella.

Non è obbligatorio ma comune che l'editor appaia usando come valore corrente della modifica il valore che la cella ha.

Così il nostro editor in quel metodo dice:

quando la tabella mi comunica che devo entrare in gioco, assumo come mio valore quello della cella che devo modificare e poi appaio.

IL true serve per far sì che la lista (inserita in un JScrollPane) scorra fino a visualizzare il valore scelto
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2010, 15:56   #5
bobby1112
Senior Member
 
Iscritto dal: May 2009
Messaggi: 366
il modello della mia tabella è questo

Quote:
private class TableModelDatabase extends AbstractTableModel{

private static final long serialVersionUID = 1L;
private SourceEntity entity = null;


public void setEntity(SourceEntity entity){
this.entity = entity;

}

public int getColumnCount() {
return 1;
}

@Override
/*
public boolean isCellEditable(int rowIndex, int columnIndex) {
if (columnIndex == 0){
return true;
}
return false;
}
*/

public int getRowCount() {
if (entity != null){
return entity.getAttributes().size();
}else{
return 1;
}
}

public Object getValueAt(int rowIndex, int columnIndex) {
if (entity != null){
Attribute attribute = entity.getAttributes().get(rowIndex);
if (columnIndex == 0)
return attribute.getOriginalType();

}
return null;

}
public String getColumnName(int column) {

return "<html><h4>"+entity.getOriginalName()+"</h4><html>";

}

//Selezionare il tipo con menu a tendina
@Override
public void setValueAt(Object arg0, int arg1, int arg2) {
super.setValueAt(arg0, arg1, arg2);
if (arg2 == 2){
entity.getAttributes().get(arg1).setImportedType(arg0);
}
}
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}


}
quindi non so come gestire la riscrittura di

Quote:
override def getCellEditor(row: Int, col: Int) = {
__________________
visitate http://www.forumsenzacontro.altervista.org
bobby1112 è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2010, 16:01   #6
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
il metodo da sovrascrivere è di JTable, non del suo modello. Da qualche parte avrai una cosa tipo:

JTable table = new JTable(ilModello);

Basta cambiarlo in:

Codice:
JTable table = new JTable(ilModello) {
    private final ListEditor editor = new ListEditor();

    @Override
    public TableCellEditor getCellEditor(int row, int col) {
        ...se la riga o la colonna della tabella identificano
        ...una cella che vuoi cambiare col tuo editor, restituisci editor
        ...altrimenti super.getCellEditor(row, col);
    }
}
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2010, 16:49   #7
bobby1112
Senior Member
 
Iscritto dal: May 2009
Messaggi: 366
non riesco bene a capire il funzionamento
questa è lamia Jdialog contenente la tabella

Quote:
public CheckDialog(JFrame owner,String [][] datatype,SourceEntity typdatatype,String database)
{
super(owner);
this.setTitle("Check DataType");
this.owner=owner;

dataTypeDb=datatype;
dataTypeTyp=typdatatype;
databaseName=database;

model.setEntity(dataTypeTyp);
model2.setEntity(dataTypeDb,typdatatype.getName());


tableTypeDatabase=new JTable(model2) {

private static final long serialVersionUID = 1L;
private final ListEditor editor = new ListEditor();

@Override
public TableCellEditor getCellEditor(int row, int col) {
if(col==0)
{
System.out.println("RITORNO MIO EDITOR");
return editor;
}
else
super.getCellEditor(row, col);
return editor;

}
};

tableTypeTyp=new JTable(model);

this.setSize(500,300);
if (owner != null){
int x = (owner.getWidth() - this.getWidth()) / 2;
int y = (owner.getHeight() - this.getHeight()) / 2;;
this.setLocation(x, y);
}
Box top=Box.createVerticalBox();
Box boxLabel=Box.createHorizontalBox();
top.add(boxLabel);
boxLabel.add(label1);
boxLabel.add(Box.createHorizontalStrut(190));
boxLabel.add(label2);
top.add(Box.createVerticalStrut(30));
Box table1=Box.createHorizontalBox();
top.add(table1);


table1.add(new JScrollPane(tableTypeDatabase));
table1.add(Box.createHorizontalStrut(30));
table1.add(new JScrollPane(tableTypeTyp));

settingTableDimension();
addFeatures();
addListener();

JPanel panel = new JPanel();
panel.add(top);
getContentPane().add(panel);

this.setVisible(true);

}
e questa e la classe per l' editor

Quote:
public class ListEditor extends AbstractCellEditor implements TableCellEditor{

String oldValue;
String editorValue;
Component component;

@Override
public Component getTableCellEditorComponent(JTable table, Object value,
boolean arg2, int arg3, int arg4) {
oldValue = (String)value;
editorValue =(String) value;
typeDialog.getjListType().setSelectedValue(oldValue, true); //type dialog e un' altra jDialog contenente la lista dove ho aggiunto il mouselistener per il doppio click
return component;
}
@Override
public Object getCellEditorValue() {
return editorValue;
}
__________________
visitate http://www.forumsenzacontro.altervista.org
bobby1112 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Un fulmine sulla scrivania, Corsair Sabre v2 Pro ridefinisce la velocità nel gaming Un fulmine sulla scrivania, Corsair Sabre v2 Pro...
Nokia Innovation Day 2025: l’Europa ha bisogno di campioni nelle telecomunicazioni Nokia Innovation Day 2025: l’Europa ha bisogno d...
Sottile, leggero e dall'autonomia WOW: OPPO Reno14 F conquista con stile e sostanza Sottile, leggero e dall'autonomia WOW: OPPO Reno...
Destiny Rising: quando un gioco mobile supera il gioco originale Destiny Rising: quando un gioco mobile supera il...
Plaud Note Pro convince per qualità e integrazione, ma l’abbonamento resta un ostacolo Plaud Note Pro convince per qualità e int...
Adesso ci si può laureare in stor...
Impact.com ridefinisce il performance ma...
Nintendo non considera le mod dannose pe...
Dreame inaugura il suo flagship store a ...
OpenAI e Jony Ive: in arrivo un disposit...
TikTok, secondo Trump l'accordo con Xi &...
HUAWEI, tutte le novità dell'even...
Mercedes GenH2 Truck sulle Alpi: oltre 1...
Shadow Leak: ecco come ChatGPT poteva es...
Google Gemini 2.5 batte quasi tutti gli ...
Battlefield 6: i giocatori console non p...
Iliad rinnova l'offerta mobile: tre pian...
HUAWEI Watch GT 6 ufficiale: design al t...
Reggie Townsend di SAS: l’etica dell’IA ...
Startup Marathon in vista del traguardo:...
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: 22:36.


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