Torna indietro   Hardware Upgrade Forum > Software > Programmazione

DLSS 4.5: con Dynamic Frame Generation e MFG 6X NVIDIA alza la posta
DLSS 4.5: con Dynamic Frame Generation e MFG 6X NVIDIA alza la posta
DLSS 4.5 introduce Dynamic Multi Frame Generation e MFG 6X, permettendo fino a cinque frame generati per ogni frame renderizzato. I test su Cyberpunk 2077 e 007 First Light mostrano forti incrementi di FPS e riduzione della latenza su RTX 5090 Laptop. Migliorano fluidità, stabilità e qualità visiva.
Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere)
Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere)
Quattro modi di indossarlo, stessa app del Plaud Note Pro e integrazione con il desktop. Il registratore IA da indossare di Plaud eccelle in mobilità, ma resta vincolato all'abbonamento ed è facile da perdere
Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro
Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro
Xiaomi ha portato Redmi Watch 6 anche sul mercato italiano, puntando su un display AMOLED da 2,07 pollici con picco di luminosità a 2000 nit, frame in alluminio da 9,9mm e un'autonomia dichiarata di 12 giorni. Lo smartwatch gira su HyperOS 3 e integra GPS, Bluetooth 5.4 e oltre 150 sport mode. Il tutto a meno di 100 euro
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-03-2007, 09:58   #1
rayman2
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);
    }
Come potrete notare i problemi che ho sono principalmente due: il menu appare sia cliccando col tasto destro che con quello sinistro, inoltre cliccando col destro non seleziona la riga; il secondo è che il menu non appare esattamente nel punto in cui si trova il mouse in quel momento.
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!
rayman2 è offline   Rispondi citando il messaggio o parte di esso
Old 14-03-2007, 10:07   #2
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
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
}
Più in generale, la questione pulsante destro/sinistro è documentata in InputEvent.getModifiersEx()
__________________
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 14-03-2007, 10:42   #3
rayman2
Senior Member
 
Iscritto dal: Jan 2002
Messaggi: 437
Tutto perfetto, grazie mille!
rayman2 è offline   Rispondi citando il messaggio o parte di esso
Old 14-03-2007, 10:49   #4
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
Oppure:
Codice:
	@Override public void mousePressed(MouseEvent e)
	{
		if( e.isPopupTrigger() )
			{ ... }
lovaz è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


DLSS 4.5: con Dynamic Frame Generation e MFG 6X NVIDIA alza la posta DLSS 4.5: con Dynamic Frame Generation e MFG 6X ...
Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere) Plaud NotePin S, il registratore IA si fa indoss...
Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro Redmi Watch 6 in prova: lo smartwatch con ampio ...
Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ADV, ma con molti più pulsanti Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ...
Radeon RX 9070 GRE, AMD la porta in tutto il mondo | Recensione Gigabyte Gaming OC Radeon RX 9070 GRE, AMD la porta in tutto il mon...
Alla WWDC 2026 arriva la nuova architett...
Tra schede madri, schede video e IA le n...
Nintendo,multa da 35 milioni di euro in ...
L'amministrazione Trump valuta una parte...
WWDC 26: Apple rinnova il controllo pare...
Apple al WWDC 26 presenta iOS 27: Liquid...
Xbox, alla fine, dà ragione a Pla...
Minecraft Dungeons 2: Microsoft ha annun...
Synology al Computex 2026: nuova generaz...
Quobly raccoglie 115 milioni di euro per...
BYD batte sul tempo Tesla Roadster: avvi...
Le auto volanti (elettriche) in Cina son...
Senua è il sequel di Hellblade II...
La Commissione europea taglia le bollett...
Halo: Campaign Evolved, annunciata la da...
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:55.


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