Clase interna, acceder a objetos

Iniciado por ltbl, 5 Marzo 2011, 14:24 PM

0 Miembros y 1 Visitante están viendo este tema.

ltbl

Hola. Pues tengo esta duda en java. Tengo una clase interna anonima para tratar eventos:
Código (java) [Seleccionar]
bonificacion.elementAt(totalBonificacion).addMouseListener(new MouseListener(){//metodos}


quiero saber como acceder y modificar objetos o variables de la clase principal.

Por ejemplo, en este caso, el objeto  al que le estoy añadiendo el listener es una label, que quiero poner en setEnabled(false) al clicar encima con el raton.

¿alguien me explica como puedo hacerlo? gracias

Edito: he podido declarando la label como final pero no se si hay alguna forma más correcta

sapito169

-evita usar mouselistener es mejor que extiendas de mouseAdapter asi tienes codigo mas limpio

-que una variable sea final es algo muy bueno en realidad no ponerle a una variable final especialmente si es global es una mala idea y conlleva a que vuelvas todo mas difícil así que a tus variables globales ponle final a menos que tengas una buena razón por no hacerlo y si necesitas que una variable sea final pues no te hagas problemas

-si de todas maneras quieres trabajar sin usar final entonces así puedes hacerlo
Así primero pones la variable como global luego creas un método en la clase principal y finalmente llamas al método que has creado desde la clase anónima interna


package org.kodejava.example.swing;

import javax.swing.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class MouseClickEventDemo extends JFrame {
    private JLabel label = new JLabel();
       
     public MouseClickEventDemo() {
        initComponents();
    }

    private void initComponents() {
        setSize(300, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        textArea.setText("Click Me!");

        textArea.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                presionoBoton(e)
            }
        });

        getContentPane().add(textArea);
    }

    public void presionoBoton(MouseEvent e) {
     //as lo que quieras con el label
   }
}