Duda muy basica sobre el paso de parametros
Hola a todos, dejadme q os ponga la situacion:
Tienes un int declarado en una clase, y quieres que en un momento dado salte un listener y modifique ese valor, pero no se como hacer que en el listener que recoje ese suceso, se le pase la variable int y le cambie el valor, para q al volver a la funcion principal, mantenga el nuevo valor.
Por ejemplo:
import javax.swing.*;
public class PruebaMain {
public static void main (String[] Args)
{
int valor=0;
JPanel P = new JPanel();
JFrame F = new JFrame();
JButton B = new JButton(\\\"Cambiar Valor\\\");
JButton B2 = new JButton(\\\"Imprime\\\");
P.add(B);
P.add(B2);
F.add(P);
F.setVisible(true);
F.pack();
B.addMouseListener(new Pulsar(valor));
B2.addMouseListener(new Imprimir(valor));
}
Listener 1:
import java.awt.event.*;
public class Pulsar extends MouseAdapter{
int valor;
public Pulsar(int valor)
{
this.valor=valor;
}
public void mouseClicked(MouseEvent E)
{
valor=valor + 10;
}
}
Listener 2:
import java.awt.event.*;
public class Imprimir extends MouseAdapter{
int valor;
public Imprimir(int valor)
{
this.valor=valor;
}
public void mouseClicked(MouseEvent E)
{
System.out.println(valor);
}
}
:-( q vergüenza, seguro q es superbasico, pero no me sale. Podeis ayudarme por favor?
Tienes un int declarado en una clase, y quieres que en un momento dado salte un listener y modifique ese valor, pero no se como hacer que en el listener que recoje ese suceso, se le pase la variable int y le cambie el valor, para q al volver a la funcion principal, mantenga el nuevo valor.
Por ejemplo:
import javax.swing.*;
public class PruebaMain {
public static void main (String[] Args)
{
int valor=0;
JPanel P = new JPanel();
JFrame F = new JFrame();
JButton B = new JButton(\\\"Cambiar Valor\\\");
JButton B2 = new JButton(\\\"Imprime\\\");
P.add(B);
P.add(B2);
F.add(P);
F.setVisible(true);
F.pack();
B.addMouseListener(new Pulsar(valor));
B2.addMouseListener(new Imprimir(valor));
}
Listener 1:
import java.awt.event.*;
public class Pulsar extends MouseAdapter{
int valor;
public Pulsar(int valor)
{
this.valor=valor;
}
public void mouseClicked(MouseEvent E)
{
valor=valor + 10;
}
}
Listener 2:
import java.awt.event.*;
public class Imprimir extends MouseAdapter{
int valor;
public Imprimir(int valor)
{
this.valor=valor;
}
public void mouseClicked(MouseEvent E)
{
System.out.println(valor);
}
}
:-( q vergüenza, seguro q es superbasico, pero no me sale. Podeis ayudarme por favor?
Hola:
No puedes de una forma sencilla. No es posible pasar un int y que cambie de valor. La unica posibilidad es que los listeners vean directamente el int de la clase principal para cambiarlo.
Un mecanismo normal es hacer esto
public static void main (String [] args)
{
new PruebaMain();
}
PruebaMain debe tener como atributo el int valor, en vez de ser una variable local. Luego, en el constructor de PruebaMain, además de instanciar los botones, puedes hacer esto
JButton B = new JButton(\\\"Cambiar Valor\\\");
B.addActionListener(new ActionListener()
{
public void actionPerformed (ActionEvent e)
{
valor = valor+10;
}
}
);
Al hacer el ActionListener de esta forma en vez de como clase aparte, tiene acceso a los atributos de PruebaMain y en concreto a valor.
Se bueno
No puedes de una forma sencilla. No es posible pasar un int y que cambie de valor. La unica posibilidad es que los listeners vean directamente el int de la clase principal para cambiarlo.
Un mecanismo normal es hacer esto
public static void main (String [] args)
{
new PruebaMain();
}
PruebaMain debe tener como atributo el int valor, en vez de ser una variable local. Luego, en el constructor de PruebaMain, además de instanciar los botones, puedes hacer esto
JButton B = new JButton(\\\"Cambiar Valor\\\");
B.addActionListener(new ActionListener()
{
public void actionPerformed (ActionEvent e)
{
valor = valor+10;
}
}
);
Al hacer el ActionListener de esta forma en vez de como clase aparte, tiene acceso a los atributos de PruebaMain y en concreto a valor.
Se bueno