Torna indietro   Hardware Upgrade Forum > Software > Programmazione

ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondono completezza e duttilità
ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondono completezza e duttilità
NUC 15 Pro e NUC 15 Pro+ sono i due nuovi mini-PC di casa ASUS pensati per uffici e piccole medie imprese. Compatti, potenti e pieni di porte per la massima flessibilità, le due proposte rispondono in pieno alle esigenze attuali e future grazie a una CPU con grafica integrata, accompagnata da una NPU per la gestione di alcuni compiti AI in locale.
Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint
Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint
Dal palco di Proofpoint Protect 2025 emerge la strategia per estendere la protezione dagli utenti agli agenti IA con il lancio di Satori Agents, nuove soluzioni di governance dei dati e partnership rafforzate che ridisegnano il panorama della cybersecurity
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Dopo alcuni anni di assenza dai cataloghi dei suoi televisori, Hisense riporta sul mercato una proposta OLED che punta tutto sul rapporto qualità prezzo. Hisense 55A85N è un televisore completo e versatile che riesce a convincere anche senza raggiungere le vette di televisori di altra fascia (e altro prezzo)
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


ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondono completezza e duttilità ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondo...
Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint Cybersecurity: email, utenti e agenti IA, la nuo...
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti Hisense A85N: il ritorno all’OLED è convi...
Acer TravelMate P6 14 AI: il Copilot+ PC sotto il chilo per il professionista in movimento Acer TravelMate P6 14 AI: il Copilot+ PC sotto i...
Recensione Borderlands 4, tra divertimento e problemi tecnici Recensione Borderlands 4, tra divertimento e pro...
ASUS ROG aggiorna la sua gamma: arrivano...
Avalanche Studios, la software house che...
Tante novità in arrivo per OnePlu...
Novità per la smarthome da EZVIZ....
Intel SGX e AMD SEV-SNP aggirabili su pi...
Autovelox, parte il censimento ufficiale...
Adobe Premiere arriva su iPhone: l'app &...
Il Cybertruck di Tesla non può es...
Windows 11 25H2 è stato appena ri...
VMware, con la versione 9 di Cloud Found...
Area B e C Milano, stop alle auto benzin...
Huawei FreeBuds 7i arrivano in Italia: c...
Offerte Amazon Fire TV: smart TV per ogn...
iPhone 11 Pro Max e Apple Watch Series 3...
Toyota ha venduto solo 18 elettriche ad ...
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: 13:00.


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