Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    49

    Intercettare click su jButton

    Ciao a tutti
    ho il seguente problema:
    con questo codice che posto di seguito praticametnte ottengo una serie di jButton con al loro interno una icona (tutte le icone sono presenti nella dirSorgente che passo al metodo caricaEmoticons).
    Io vorrei che alla pressione di un qualsiasi bottone, l'immagine in esso contenuta venisse appesa al testo all'interno di un jTextPane.

    Per fare questo dovrei innanzitutto catturare il click sul pulsante (i) e nn so come si fa e poi capire qual è l'icona associata al pulsante cliccato per poterla visualizzare in un jTextPane.

    A tale scopo ho creato un listener per la gestione dell'evento click ma non riesco a farlo funzionare.
    Sapete darmi qualche consiglio?





    codice:
    public void caricaEmoticons(String dirSorgente) {
    		File files= new File(dirSorgente);
    		int righe=0;
    		int colonne = 0;
    		ActionListener listener = new ClickIcon();
    		String [] listaFile = files.list();
    		for (intCountIcon=0; intCountIcon<listaFile.length-1; intCountIcon++) {
    			jBtoIcon= new JButton[(listaFile.length)];
    			jBtoIcon[intCountIcon]=(new JButton(new ImageIcon(dirSorgente + "/"+listaFile[intCountIcon])));
    			jBtoIcon[intCountIcon].setBackground(Color.red);
    			jCP_Emoticons.add(jBtoIcon[intCountIcon]);
    			jBtoIcon[intCountIcon].addActionListener(listener);
    		}
    		if((intCountIcon>0) && (intCountIcon<=10)) {
    			righe=intCountIcon/3;
    			colonne=2;
    		}else if ((intCountIcon>10) && (listaFile.length<=30)) {
    			righe=intCountIcon/6;
    			colonne=2;
    		}
    		jCP_Emoticons.setLayout(new GridLayout(righe,colonne));
    		jSP_Emoticons.setViewportView(jCP_Emoticons);
    	}
    	
    	 class ClickIcon implements ActionListener{
    		@Override
    		public void actionPerformed(ActionEvent e) {
    			//jTxtF_Msg.setText(jTxtF_Msg.getText() + " " +  jBtoIcon[intCountIcon]);
    			//jTP_Chat1.setText(jTxtF_Msg.getText() + " " + );
    			jBtoIcon[intCountIcon].getPressedIcon();
    		}
    	 }

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Intercettare click su jButton

    Originariamente inviato da Vbnet
    e nn so come si fa e poi capire qual è l'icona associata al pulsante cliccato
    È davvero semplice: il ActionEvent ti fornisce la "sorgente" dell'evento tramite getSource() (che nota, restituisce Object).
    Tu "sai" che se sei dentro quel listener è perché l'evento arriva da un JButton, quindi fai un cast a JButton del Object sorgente e da lì puoi tranquillamente prendere la icona.

    Quindi nota: se non ti serve per altri motivi (non lo posso sapere solo vedendo quel codice), non servirebbe avere un array jBtoIcon. E anzi, noto che la istanziazione di questo array la fai dentro il ciclo ..... che di per sé così non avrebbe nemmeno senso!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    49
    Ciao andbin
    innanzitutto grazie per la celere risposta.
    sono alle prime armi ancora e quindi trovo spesso difficoltà.
    Ho cercato di interpretare quanto da te suggeritomi modificando il codice in qs modo:

    codice:
    class ClickIcon implements ActionListener{
    		@Override
    		public void actionPerformed(ActionEvent e) {
    			JButton clickedButton = (JButton) e.getSource();
    			jTxtF_Msg.setText(jTxtF_Msg.getText() + " " +  clickedButton.getIcon());
    		}
    	 }
    ma sono riuscito solo parzialmente nel mio intento.
    Ora riesco a catturare il click sul bottone ma non riesco a visualizzare a video l'icona.
    In pratica sul jTextPane con questa istruzione:

    codice:
    jTxtF_Msg.setText(jTxtF_Msg.getText() + " " +  clickedButton.getIcon());
    ottengo l'indirizzo della cartella in cui l'icona è salvata sotto forma di stringa e non l'icona stessa.
    Potresti cortesemente aiutarmi?
    Grazie mille

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Vbnet
    codice:
    jTxtF_Msg.setText(jTxtF_Msg.getText() + " " +  clickedButton.getIcon());
    ma non riesco a visualizzare a video l'icona.
    No, infatti così non è appropriato. La icona non è un "testo" (anche se il toString() del Icon qualcosa ti fornisce) e non puoi banalmente concatenare questo al resto del contenuto nel componente!!

    Hai parlato di JTextPane, con questo componente si usa un document che è una implementazione di StyledDocument (di norma DefaultStyledDocument). Devi usare degli "attributi" (un oggetto SimpleAttributeSet che è la implementazione predefinita) e assegnarci la icona. Nel document però ci deve essere comunque qualcosa come testo, anche solo uno "spazio" che poi per via dell'attributo speciale verrà visualizzata la icona al posto del testo.

    Guarda il mio esempio StyledText.java che trovi qui e .... capirai sicuramente (almeno spero).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    49
    perfetto gli darò subito un'occhiata.
    Ti ringrazio per la dritta sei stato gentilissimo.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.