2010-11-10 22 views
2

Ce que j'essaie de faire est d'utiliser des variables locales dans le mouseListener que j'ajoute (juste à cet endroit). Ce qui semble impossible, alors je voudrais demander s'il y a une alternative à ce que j'essaie de faire. Donc, fondamentalement, le problème est: je ne peux pas utiliser les variables locales (qui dans mon cas contiennent des informations sur le produit cliqué par l'utilisateur) à l'intérieur d'un mouseListener que j'ajoute dynamiquement.Java ajoute mouseListener et utilise des variables locales à l'intérieur

Ce code il est sur:

public void mouseClicked(MouseEvent e) { 

    //when user clicks on a label of a product 
    //then add it to the cart_products panel (label) 
    //also add a mouseListener to the label for the cart_products 
    //so that it can be removed from the cart again when right-mouse clicked on the label 

    //a = shop_id, index[0] = category_id, index[1] = product_id 

JLabel label = (JLabel)e.getSource(); //the label clicked on (product) 

int[] index = getProductIndex(label.getText()); //gets the indexes of the product clicked on 

cart_products[a][index[0]][index[1]] = new JLabel("1x ("+current+") "+product_prices[a][index[0]][index[1]]+" Euro - "+label.getText()); 

//create a new label inside the shopping cart for the product clicked on 
//to 'add it to the shopping cart' 

###################### NOT WORKING START ###################### 
//add a mouseListener to the new product label inside the shopping cart 
//to make a right-mouse click on the product label, remove the product label 
cart_products[a][index[0]][index[1]].addMouseListener(new MouseListener() { 

    public void mouseClicked(MouseEvent e) { 
    if(SwingUtilities.isRightMouseButton(e)){ 
     removeCartProduct(a, index[0], index[1]); //<!--- cannot use these local variables 
    } 
    } 

} 
###################### NOT WORKING END ###################### 

} 

Cela fait partie d'un grand code afin que je ne peux malheureusement pas poster un SSCCE complet avec un code & compile- prêt exécuter. J'ai donc essayé d'offrir la partie du code qui ne fonctionne pas correctement (ce qui je suis sûr que c'est seulement cette partie marquée aveC#s). En tout cas j'espère qu'on peut donner une solution à mon problème.

Merci d'avance!

Cordialement, Skyfe.

Répondre

2

Vous pouvez utiliser des variables locales déclarées comme final: final int[] index = getProductIndex... et la même chose pour a.