Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1

    Double click in una JList

    Ciao a tutti, sto cercando di implementare una JList con un CellRenderer custom, il mio problema ora e' capire come si puo' gestire il doubleclick per gli elementi della JList, il codice che per ora ho scritto non va...

    Codice PHP:
    public class MyCellRenderer extends JLabel implements ListCellRenderer{
        

        public 
    Component getListCellRendererComponent(JList myListObject valueint indexboolean isSelectedboolean cellHasFocus) {
            
            if (
    isSelected) {
                
    setBackground(myList.getSelectionBackground());
                
    setForeground(myList.getSelectionForeground());
            } else {
                
    setBackground(myList.getBackground());
                
    setForeground(myList.getForeground());
            }

            
    //Set the icon and text.  If icon was null, say so.
            
    final UserToDisplay tmp = (UserToDisplay)value;
            
    ImageIcon icon tmp.getAvatar();
            
    String toDisplay tmp.getName();
            
    setIcon(icon);
            if (
    icon != null) {
                
    setText(toDisplay);
                
            } else {
                
    setText(toDisplay " (no image available)");
            
            }
            
    addMouseListener(new MouseAdapter(){
                public 
    void mouseClicked(MouseEvent e){
                    if (
    e.getClickCount()==2){
                        
    System.out.println("Rilevato \"Double click\", apro finestra chat");
                        new 
    ChatGui(tmp.getName(),tmp.getPMessage(),tmp.getProtocol(),
                                                                 
    tmp.getStatus(),tmp.getEmail(), tmp.getAvatar());
                    }
                }
            });
            return 
    this;
        }


  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    A parte il fatto che registrare un listener su un renderer non ha molto senso .... infatti il componente ritornato dal renderer viene semplicemente "stampato" a video. Quelli che vedi nel JList non sono "veri" componenti, quindi non ci può essere un qualche "comportamento" da parte del componente.

    Dovresti registrare un MouseListener sul JList e quando ricevi l'evento esso ti fornisce il Point sul componente e con questo Point ottieni poi l'indice dell'elemento "logico" nel JList usando locationToIndex() di JList.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    ok per quanto riguarda registrare il MouseListener sul JList, ma non capisco molto cosa devo fare:
    Codice PHP:
    JList myList = new JList(data);
    myList.addMouseListener(new MouseAdapter(){
          public 
    void MouseClicked(MouseEvent e){
                 
    //
                 //immagino di dovere fare qualcosa qui per ottenere l'oggetto
                 //del DefaultListModel, ma cosa?
                 //
                 
    if (e.getClickCount()==2){
              
    System.out.Println("Rilevato \"Double click\");
                      //qui tutto cio' che deve avvenire sull'oggetto
                 }
          }


  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da pinzo
    ok per quanto riguarda registrare il MouseListener sul JList, ma non capisco molto cosa devo fare
    1) prendi il Point dal MouseEvent
    2) ottieni l'indice dell'elemento invocando locationToIndex() sul JList (e il reference al JList lo puoi ottenere da e.getSource(), facendo il cast a JList, ovviamente).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    ok, grazie mille, funziona!

  6. #6
    Utente di HTML.it L'avatar di Cool81
    Registrato dal
    Dec 2008
    Messaggi
    160

    Azzerrare i click del mouse

    Ho il seguente codice legato al doppio click su un elemento di una jlist:

    codice:
    MouseListener mouseListener = new MouseAdapter() {             
    @Override             
    public void mouseClicked(MouseEvent e) {                 
    if (e.getClickCount() == 2) {                  
     int indice = userList.getSelectedIndex();                     
    String selected = userList.getSelectedValue().toString();                     
    User_JFrame user_file = new User_JFrame(selected, indice);  
                       
    user_file.setVisible(true);                 
    }                              
    }         
    };         
    userList.addMouseListener(mouseListener);
    Credo che il problema sia che una volta che l'evento si è verificato, i click del mouse non si azzerano.
    Mi spiego meglio:
    1. clicco un primo elemento nella jlist, viene aperto un jframe;
    2. clicco un secondo elemento della jlist, si aprono tre jframe.
    3. clicco un terzo elemento della jlist, si aprono cinque jframe
    e così via.
    Suggerimenti per una soluzione?
    grazie

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

    Re: Azzerrare i click del mouse

    Originariamente inviato da Cool81
    Credo che il problema sia che una volta che l'evento si è verificato, i click del mouse non si azzerano.
    Non credo ... non mi sembra. Posta più codice, magari c'è altro.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it L'avatar di Cool81
    Registrato dal
    Dec 2008
    Messaggi
    160
    Metto il codice completo legato all'evento:

    codice:
    private void userListMouseClicked(java.awt.event.MouseEvent evt) {         
    MouseListener mouseListener = new MouseAdapter() {             
    @Override             
    public void mouseClicked(MouseEvent e) {                 
    if (e.getClickCount() == 2) {                   
    int indice = userList.getSelectedIndex();                     
    String selected = userList.getSelectedValue().toString();                     
    User_JFrame user_file = new User_JFrame(selected, indice);     
    
    user_file.setVisible(true);                 
    }                              
    }        
     };         
    userList.addMouseListener(mouseListener);     
    }
    userList è il nome della jList.
    Il problema dovrebbe stare qui no?

  9. #9
    Utente di HTML.it L'avatar di Cool81
    Registrato dal
    Dec 2008
    Messaggi
    160
    Help!Help!Help!


    Nessuno ha mai avuto un problema simile?


  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Cool81
    Il problema dovrebbe stare qui no?
    No, non credo che sia lì. Puoi almeno postare un programmino minimale che mostra e presenta questo inconveniente?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.