|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2002
Messaggi: 437
|
[Java] Swing: menu contestuale con tasto destro su JTable
Ciao a tutti,
sto facendo una micro applicazione Java basata su swing (come accennato anche in un post precedente). La finestra principale ha un JMenu e subito sotto una JTable. Quello che vorrei ottenere è che cliccando col tasto destro su di una riga della tabella venga selezionata la riga e mostrato un menu contestuale per compiere delle azioni riguardanti quella riga di tabella (inserimento, cancellazione, refresh, apertura nel browser del link associato). Ho creato un JPopupMenu e associato alla JTable un listener dell'evento MouseEvent che rende visibile il JPopupMenu. Ecco degli stralci del codice: Codice:
table.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseReleased(java.awt.event.MouseEvent evt) {
tableMouseReleased(evt);
}
});
Codice:
private void tableMouseReleased(java.awt.event.MouseEvent evt) {
rightClickMenu.setLocation(evt.getX() + this.getX() + 20, evt.getY() + this.getY() + 70);
rightClickMenu.setVisible(true);
}
Per il primo problema non so proprio come cavarmela: si può evolvere la mia idea o devo pensare a qualcosa di diverso? Per il secondo come vedete ho pensato di posizionare il menu in base alla somma di coordinate dei singoli componenti ma anche così non si posizionava dove volevo io. Ho quindi dovuto aggiungere dei valori, 20 e 70, per aggiustare ad hoc la posizione. Ho forse dimenticato nel conteggio qualche componente o "va bene così"? Il dubbio è che i valori trovati empiricamente sul mio PC possano sballare in altre configurazioni della finestra. Grazie dell'aiuto! |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
JPopupMenu ha un metodo, show, che richiede come primo argomento il componente che genera l'evento del mouse e come secondo e terzo le coordinate (x, y) del punto in cui si è fatto click. Del genere:
Component source = mouseEvent.getComponent(); popup.show(source, e.getX(), e.getY()); Per selezionare la riga sulla tabella è sufficiente trasformare il punto di pressione in un indice di riga. Se guardi nella documentazione di JTable c'è un esempio già pronto che tratta di questa trasformazione. Per controllare quale pulsante è stato premuto e poi decidere se attivare o meno il popup il modo più sintetico è usare SwingUtilities. Ad esempio: Codice:
if(SwingUtilities.isRightMouseButton(mouseEvent)) {
//pulsante destro
}
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jan 2002
Messaggi: 437
|
Tutto perfetto, grazie mille!
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jul 2002
Messaggi: 4334
|
Oppure:
Codice:
@Override public void mousePressed(MouseEvent e)
{
if( e.isPopupTrigger() )
{ ... }
__________________
|Java Base| |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:03.











|








