Java добавить mouseListener и использовать локальные переменные внутри - PullRequest
2 голосов
/ 10 ноября 2010

То, что я пытаюсь сделать, это использовать локальные переменные внутри mouseListener, который я добавляю (прямо на этом месте). Что кажется невозможным, поэтому я хотел бы спросить, есть ли альтернативный способ для того, что я пытаюсь сделать.

В общем, проблема в том, что я не могу использовать локальные переменные (которые в моем случае содержат информацию о продукте, на который нажал пользователь) внутри mouseListener, который я добавляю динамически.

Вот код, о котором идет речь:

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 ###################### 

}

Это часть большого кода, поэтому, к сожалению, я не могу опубликовать полный SSCCE с кодом, готовым к компиляции и выполнению. Поэтому я попытался предложить часть кода, которая не работает должным образом (я уверен, что только эта часть помечена #s). В любом случае, я надеюсь, что можно решить мою проблему.

Заранее спасибо!

С наилучшими пожеланиями, Skyfe.

1 Ответ

2 голосов
/ 10 ноября 2010

Вы можете использовать локальные переменные, объявленные как final: final int[] index = getProductIndex... и то же самое для a.

...