Torna indietro   Hardware Upgrade Forum > Software > Programmazione

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)
Recensione Borderlands 4, tra divertimento e problemi tecnici
Recensione Borderlands 4, tra divertimento e problemi tecnici
Gearbox Software rilancia la saga con Borderlands 4, ora disponibile su PS5, Xbox Series X|S e PC. Tra le novità spiccano nuove abilità di movimento, un pianeta inedito da esplorare e una campagna che lascia al giocatore piena libertà di approccio
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 08-03-2007, 10:41   #1
max246
Senior Member
 
Iscritto dal: May 2005
Messaggi: 340
[Java] List e Action listener

mi sono fermato nel mio progetto di java, non riesco ad aggiungere a un singolo elemento del JLIST un'evento.
Io uso un modello DefaultListModel per aggiungere gli elementi e un JList che usa questo modello.

Mi potete aiutare?
max246 è offline   Rispondi citando il messaggio o parte di esso
Old 08-03-2007, 12:03   #2
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Gli elementi di JList sono solo disegnati. Non sono componenti in senso pieno. Se vuoi generare un evento quando l'utente interagisce con un elemento della lista puoi "filtrare" un evento prodotto sull'intera lista. Ad esempio aggiungi alla lista un MouseListener e, quando intercetti un click, prima di reagire verifichi se il click è intervenuto in corrispondenza di una certa voce nella lista.
__________________
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 08-03-2007, 12:09   #3
DvL^Nemo
Senior Member
 
L'Avatar di DvL^Nemo
 
Iscritto dal: Nov 2001
Città: 100 metri dal mare
Messaggi: 4855
Quote:
Originariamente inviato da max246 Guarda i messaggi
mi sono fermato nel mio progetto di java, non riesco ad aggiungere a un singolo elemento del JLIST un'evento.
Io uso un modello DefaultListModel per aggiungere gli elementi e un JList che usa questo modello.

Mi potete aiutare?
lstPippo.getModel().getElementAt() e ci fai tutto quello che ti serve
DvL^Nemo è offline   Rispondi citando il messaggio o parte di esso
Old 08-03-2007, 13:00   #4
max246
Senior Member
 
Iscritto dal: May 2005
Messaggi: 340
io ho bisogno che su ogni "voce" inserita nella Jlist, al doppio click faccia un'azione.
Ovvero come nei bottoni gli passi una classe, io vorrei dare un classe ad ogni "voce".

si puo fare?
max246 è offline   Rispondi citando il messaggio o parte di esso
Old 08-03-2007, 13:18   #5
DvL^Nemo
Senior Member
 
L'Avatar di DvL^Nemo
 
Iscritto dal: Nov 2001
Città: 100 metri dal mare
Messaggi: 4855
Codice:
mialista.addMouseListener(new MouseAdapter() {
	public void mouseClicked(MouseEvent me) {
		Object ob[] = mialista.getSelectedValues();
      	        //if (ob.length > 1) return; --> Vedi se ti serve
		if (me.getClickCount() == 2) {
		    Object[] objSelezione=mialista.getSelectedValues();
		    //DefaultListModel lstModel=(DefaultListModel) mialista.getModel();		--> Vedi se ti seve a qualcosa
  		       for(int i=0;i<objSelezione.length;i++){
			    faiqualcosacon(objSelezione[i]);
		       }
		    
		}
	}
});
DvL^Nemo è offline   Rispondi citando il messaggio o parte di esso
Old 08-03-2007, 13:35   #6
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Il motto dell'orientamento agli oggetti è "scrivi quel che pensi". Se quel che pensi funziona inevitabilmente funzionerà quello che scriverai.

Hai una lista di voci, ad ogni voce è associata un'azione, quando fai doppio click su una voce è eseguita l'azione corrispondente.

Codice:
/** Elemento di una lista a cui è associata un'azione */
interface Voce {
	Azione getAzione();
}
Codice:
/** Qualcosa che può essere fatto. */
interface Azione {
	void esegui();
}
Codice:
/** Versione minima di una voce */
class VoceBase implements Voce {
	final Azione azione;
	final String etichetta;

	VoceBase(Azione azione, String etichetta) {
		this.azione = azione;
		this.etichetta = etichetta;
	}

	/** Il metodo toString è usato dal proiettore
	standard delle celle di una lista (o di una tabella) */
	public String toString() {
		return etichetta;
	}

	public Azione getAzione() {
		return azione;
	}
}
Codice:
/** Una... lista di voci :D */
class ListaDiVoci extends JList {

	public ListaDiVoci(Voce[] dati) {
		super(dati);
	}

	public Voce getVoce(int indice) {
		ListModel model = getModel();
		if(indice < 0 || indice > model.getSize()) {
			return null;
		} else {
			return (Voce)model.getElementAt(indice);
		}
	}
}
Codice:
/** Intercetta il click su una lista di voci. Recupera la Voce
nel punto del click e invoca la sua azione. */
class Clicker extends MouseAdapter {
	private ListaDiVoci list;

	public void install(ListaDiVoci list) {
		this.list = list;
		this.list.addMouseListener(this);
	}

	public void uninstall() {
		this.list.removeMouseListener(this);
	}

	public void mouseClicked(MouseEvent e) {
		if(isThatClick(e)) {
			doClick(e.getPoint());
		}
	}

	private boolean isThatClick(MouseEvent e) {
		return
			e.getSource() == list &&
			SwingUtilities.isLeftMouseButton(e) &&
			e.getClickCount() == 2;
	}

	private void doClick(Point p) {
		int index = list.locationToIndex(p);
		Voce voce = list.getVoce(index);
		if(voce != null) {
			voce.getAzione().esegui();
		}
	}
}
Codice:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/** Un tristo esempio :D */
public class Main implements Runnable {
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Main());
	}
	
	public void run() {
		Azione sayLo = new Azione() {
			public void esegui() {
				System.out.println("Hello world!");
			}
		};
		Azione sayBye = new Azione() {
			public void esegui() {
				System.out.println("Bye bye world!");
			}
		};
		Voce voceLo = new VoceBase(sayLo, "Hello");
		Voce voceBye = new VoceBase(sayBye, "Bye");
		Voce[] voci = { voceLo, voceBye, };
		ListaDiVoci list = new ListaDiVoci(voci);
		Clicker clicker = new Clicker();
		clicker.install(list);
		JScrollPane scroller = new JScrollPane(list);
		JFrame window = new JFrame("Sample");
		window.add(scroller);
		window.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		window.pack();
		window.setVisible(true);
	}
}
Ovviamente è solo una delle rappresentazioni possibili. Tutto dipende dall'interprete.
__________________
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 08-03-2007, 13:56   #7
max246
Senior Member
 
Iscritto dal: May 2005
Messaggi: 340
Secondo me è eccessivo quello che mi hai proposto ...

se aggiungo al modello questo:
public class CambiaFilm implements ActionListener {
private String id_film,nome;
public CambiaFilm(String id_film, String nome) {
this.id_film = id_film;
this.nome = nome;
}
public void actionPerformed(ActionEvent evt) {
System.out.println(id_film);
}
public String toString() {
return nome;
}


}
Ma non gli piace :/ magari perchè non devo usare l'actionlistener ma l'azione del mouse?
max246 è offline   Rispondi citando il messaggio o parte di esso
Old 08-03-2007, 13:59   #8
max246
Senior Member
 
Iscritto dal: May 2005
Messaggi: 340
Niente, scusate funziona...
Avevo passato un numero invece di una stringa perciò non gli piaceva...

Ora non mi funziona quando faccio il doppio click sul campo, perchè?
max246 è offline   Rispondi citando il messaggio o parte di esso
Old 08-03-2007, 14:45   #9
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Un JList non genera eventi ActionEvent. Se un componente Swing è in grado di produrre un tipo di eventi XXX allora nella documentazione java si nota un metodo addXXXListener. JList non ce l'ha.

Se JList producesse ActionEvent allora potresti usare ActionListener come collegamento tra un tuo oggetto e un JList.

Se parlassimo di programmazione orientata agli oggetti ti direi di creare un sottotipo di JList che produce ActionEvent e poi usare gli oggetti che concretizzano ActionListener perchè mi sembra che tu voglia realizzare questo meccanismo.

Comunque devi passare per il tipo di eventi che la lista produce. Usiamo gli eventi del mouse perchè... be', perchè la lista li produce e il tipo di interazione utente a cui io e DvL^Nemo abbiamo pensato è quello prodotto dal doppio click del mouse. Non è l'unico genere di eventi prodotto dalla lista. Ma dovrebbe essere quello che ti interessa.
__________________
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 08-03-2007, 14:55   #10
max246
Senior Member
 
Iscritto dal: May 2005
Messaggi: 340
Ora ho creato la classe "Clicca" ( un nome ridicolo ma vabbe ), che appena creo l'oggetto CambiaFilm nel mio modello aggiunge la lista in ascolto.

Ora per distinguere quale sia ho trovato questo:

Codice:
txt_orari.getModel().getElementAt(txt_orari.getSelectedIndex())
Ma non riesco a convertirlo in string... come faccio? Con (String) mi ritrona nullo
max246 è offline   Rispondi citando il messaggio o parte di esso
Old 08-03-2007, 16:44   #11
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Mmmhhh... non dovrebbe restituirti null. A meno che tu non abbia messo un null nel modello.

Cmq se vuoi un testo usa String.valueOf(...).
__________________
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 08-03-2007, 16:48   #12
max246
Senior Member
 
Iscritto dal: May 2005
Messaggi: 340
Quote:
Originariamente inviato da PGI-Bis Guarda i messaggi
Mmmhhh... non dovrebbe restituirti null. A meno che tu non abbia messo un null nel modello.

Cmq se vuoi un testo usa String.valueOf(...).
Perchè se faccio un println senza lo (String) esce giusto, ma quando metto lo string addio... proverò con String.value...

Grazie
max246 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


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...
Recensione Borderlands 4, tra divertimento e problemi tecnici Recensione Borderlands 4, tra divertimento e pro...
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale TCL NXTPAPER 60 Ultra: lo smartphone che trasfor...
Un fulmine sulla scrivania, Corsair Sabre v2 Pro ridefinisce la velocità nel gaming Un fulmine sulla scrivania, Corsair Sabre v2 Pro...
Battlefield 6: confermata la dimensione ...
Windows 11 porta il Wi-Fi 7 alle aziende...
Logitech MX Master 4 subito disponibile ...
'Nonna Skyrim' dice addio all'RPG di Bet...
PlayStation 5 Slim a 399€ o bundle con N...
roborock Qrevo Curv S5X in offerta a 649...
Sapphire Nitro+ B850A WIFI 7: la nuova s...
CraftGPT: un giocatore costruisce ChatGP...
Il Conto Termico 3.0 è ufficiale:...
Tesla inaugura la stazione di ricarica S...
20 super sconti Amazon senza precedenti:...
Un TV 65 pollici a 399€? Si è possibile ...
Internet in Italia: Vodafone trionfa in ...
Electronic Arts: l'acquisizione è...
Apple Intelligence: ecco le app che sono...
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:43.


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