View Full Version : [Java] Jtable ed eventi
palombaro
02-08-2004, 21:50
Buona sera ho un piccolo problema relativo agli eventi in java..
vorrei che facendo un doppio clik su una riga di uan jtable mi si aprisse una finestrella...non riesco a farlo qualcuno può aiutarmi grazie!!!
palombaro
03-08-2004, 19:50
uppete...
Originariamente inviato da palombaro
uppete...
purtroppo i due uomini swing sono in ferie :boh:
palombaro
03-08-2004, 20:08
Originariamente inviato da kingv
purtroppo i due uomini swing sono in ferie :boh:
attenderò :)
Originariamente inviato da kingv
purtroppo i due uomini swing sono in ferie :boh:
Allora mi propongo come Uomo Swing di scorta ! :D
Io farei cosi:
JTable eredita da Component il metodo addMouseListener, quindi è in grado di produrre gli eventi del mouse e basta aggiungere un MouseListener alla JTable per ricevere gli eventi prodotti. In particolare l'evento prodotto dalla JTable è un MouseEvent.
Una volta ottenuto l'evento bisogna verificare se:
- si tratta di un doppio click;
- se il doppio click è avventuo sulla riga che ti interessa.
Per sapere se si tratta di un doppio click c'è il metodo getClickCount() di MouseEvent;
Per sapere qual è la riga interessata dal click dapprima ricaviamo dal MouseEvent il punto in cui è avvenuto il click con getPoint(); quindi invochiamo sulla JTable il metodo rowAtPoint(Point point) che restituisce l'indice della riga in cui si trova il punto, o -1 se quel punto non si trova in nessuan riga. Controllando questo valore puoi decidere se far aprire o non un nuovo JFrame.
Quindi il tuo listener potrebbe essere su per giù cosi:
class DoubleClickListener exteds MouseAdapter{
//Questo campo contiene l'indice della riga su cui si
//deve fare doppio click per aprire la finestra;
//puoi anche passarlo nel costruttore o gestirlo in altro modo
private int clickRow = 0;
//A noi interessa solo l'evento di click
public void mouseClicked(MouseEvent e){
//se non è doppio click ritorno
if(e.getClickCount() < 2)
return;
//Considero solo i click del pulsante sinistro;
//se vuoi gestire l'evento anche se si fa dopppio
//click col tasto destro commenta questo if
if(e.getButton() != MouseEvent.BUTTON1)
return;
//Ricavo la tabella che ha prodotto l'evento
JTable table = (JTable)e.getSource();
//Calcolo la riga su cui si è fatto click
int clickedRow = rowAtPoint(e.getPoint());
//Se non è la riga che mi interessa ritorno
if(clickedRow != clickRow)
return;
//Altrimenti costruisco la nuova finestra
//.....
//......
//.....
}
}
Quindi quando crei la tabella devi registrare il listener:
JTable table = .....;
table.addMouseListener(new DoubleClickListener());
Dovrebbe fungere, anche se non l'ho provato, ciao!
palombaro
04-08-2004, 11:45
grazie ora lo provo.....:)
ti farò sapere ;)
palombaro
04-08-2004, 12:30
Originariamente inviato da anx721
Allora mi propongo come Uomo Swing di scorta ! :D
Io farei cosi:
JTable eredita da Component il metodo addMouseListener, quindi è in grado di produrre gli eventi del mouse e basta aggiungere un MouseListener alla JTable per ricevere gli eventi prodotti. In particolare l'evento prodotto dalla JTable è un MouseEvent.
Una volta ottenuto l'evento bisogna verificare se:
- si tratta di un doppio click;
- se il doppio click è avventuo sulla riga che ti interessa.
Per sapere se si tratta di un doppio click c'è il metodo getClickCount() di MouseEvent;
Per sapere qual è la riga interessata dal click dapprima ricaviamo dal MouseEvent il punto in cui è avvenuto il click con getPoint(); quindi invochiamo sulla JTable il metodo rowAtPoint(Point point) che restituisce l'indice della riga in cui si trova il punto, o -1 se quel punto non si trova in nessuan riga. Controllando questo valore puoi decidere se far aprire o non un nuovo JFrame.
Quindi il tuo listener potrebbe essere su per giù cosi:
class DoubleClickListener exteds MouseAdapter{
//Questo campo contiene l'indice della riga su cui si
//deve fare doppio click per aprire la finestra;
//puoi anche passarlo nel costruttore o gestirlo in altro modo
private int clickRow = 0;
//A noi interessa solo l'evento di click
public void mouseClicked(MouseEvent e){
//se non è doppio click ritorno
if(e.getClickCount() < 2)
return;
//Considero solo i click del pulsante sinistro;
//se vuoi gestire l'evento anche se si fa dopppio
//click col tasto destro commenta questo if
if(e.getButton() != MouseEvent.BUTTON1)
return;
//Ricavo la tabella che ha prodotto l'evento
JTable table = (JTable)e.getSource();
//Calcolo la riga su cui si è fatto click
int clickedRow = rowAtPoint(table.getPoint());
//Se non è la riga che mi interessa ritorno
if(clickedRow != clickRow)
return;
//Altrimenti costruisco la nuova finestra
//.....
//......
//.....
}
}
Quindi quando crei la tabella devi registrare il listener:
JTable table = .....;
table.addMouseListener(new DoubleClickListener());
Dovrebbe fungere, anche se non l'ho provato, ciao!
ti ringrazio funziona perfettamnte nel tuo codice c' è un errorino d distrazione in questa riga
int clickedRow = rowAtPoint(table.getPoint());
in realtà è così
int clickedRow = table.rowAtPoint(e.getPoint());
:)
ancora tante grazie!!!!!!
Si certo, in effetti non l'ho proprio provato ;)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.