Foro de elhacker.net

Programación => Java => Mensaje iniciado por: ktdenx en 29 Marzo 2013, 14:08 pm



Título: problemas con jslider
Publicado por: ktdenx en 29 Marzo 2013, 14:08 pm
me gustaria pasar el valor radio=slide1.getValue(); a la clase1, para que se lea en System.out.println(radio);...

por que no funciona este codigo?

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


 public class clase1 extends JFrame{
     
      clase2_dibujo di1=new clase2_dibujo();
      JSlider slide1=new JSlider(0,100,50);
      JPanel panel2=new JPanel();
    int radio;
     
public clase1(){
                 
        super ("jose");
        super.setSize(500,500);
        super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       
        BorderLayout lay1=new BorderLayout();
        Container contenedor = getContentPane();       
        contenedor.setLayout(lay1);

           //panel sur
       
        GridLayout lay2=new GridLayout();
       
        contenedor.add(panel2,BorderLayout.SOUTH);
               
        slide1.setMajorTickSpacing( 20 );
        slide1.setMinorTickSpacing(10);
        slide1.setPaintTicks( true );
        slide1.setPaintLabels(true);
     
        SliderListener slide2=new SliderListener();
        slide1.addChangeListener(slide2);
       
       
System.out.println(radio);
       
        panel2.add(slide1);
       //panel central
   
        contenedor.add(di1,BorderLayout.CENTER);//(di1 es un panel!!!)
        di1.a=radio;   
               panel2.repaint();
        setVisible(true); 
}



class SliderListener implements ChangeListener {

public void stateChanged(ChangeEvent e) {
JSlider source = (JSlider) e.getSource();
radio=slide1.getValue();
}
}
}


Título: Re: problemas con jslider
Publicado por: ThinkByYourself en 29 Marzo 2013, 15:30 pm
No sé bien bien cómo funciona, pero aquí tienes información.

http://docs.oracle.com/javase/tutorial/uiswing/components/slider.html
http://developer.apple.com/library/mac/documentation/java/reference/javase6_api/api/javax/swing/JSlider.html

Si lo que quieres es pasar un valor de una clase a otra, lo que puedes hacer es declararlo como public y static. De esa manera, en teoría debería estar disponible para cualquier clase del proyecto, pero a mí no me hagas mucho caso que yo tengo problemas de esos también xD Espero haber servido, ni que sea un poco.


Título: Re: problemas con jslider
Publicado por: ktdenx en 29 Marzo 2013, 17:47 pm
Gracias por la respuesta;

El primer ejemplo ya lo había visto, estoy tratando de hacer algo parecido pero a mi manera, que es como yo la entiendo, y me gustaria que algún experto del foro me pudiese ayudar.

Si donde pone --> int radio;
             pongo  --> public static int radio;
sigue sin funcionar...


Título: Re: problemas con jslider
Publicado por: Chuidiang en 30 Marzo 2013, 07:52 am
Según se ejecuta el código, se saca con System.out el valor de radio sin haberlo inicializado en ningún momento.

Luego, cuando se cambia el radio dentro del listener, no se le hace System.out

Prueba a darle valor al radio justo antes de sacarlo con System.out y pon también un System.out dentro del listener.

Se bueno.


Título: Re: problemas con jslider
Publicado por: ktdenx en 31 Marzo 2013, 14:08 pm
lo que yo queria es poner un system.out dentro del constructor que se actualizara al mover el slider:
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;


 public class clase1 extends JFrame{
     
      clase2_dibujo di1=new clase2_dibujo();
      JSlider slide1=new JSlider(0,200,50);
      JPanel panel2=new JPanel();
      public static int radio;
     
public clase1(){
                 
        super ("jose");
        super.setSize(500,500);
        super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
        BorderLayout lay1=new BorderLayout();
        Container contenedor = getContentPane();       
        contenedor.setLayout(lay1);

           //panel sur
       
        GridLayout lay2=new GridLayout();
       
        contenedor.add(panel2,BorderLayout.SOUTH);
               
        slide1.setMajorTickSpacing( 20 );
        slide1.setMinorTickSpacing(10);
        slide1.setPaintTicks( true );
        slide1.setPaintLabels(true);
     
        SliderListener slide2=new SliderListener();
        slide1.addChangeListener(slide2);

        panel2.add(slide1);
       //panel central
   
        contenedor.add(di1,BorderLayout.CENTER);//(di1 es un panel!!!) 
        setVisible(true);
   System.out.println(di1.a);
}



class SliderListener implements ChangeListener {

public void stateChanged(ChangeEvent e) {
JSlider source = (JSlider) e.getSource();
di1.a =slide1.getValue();
repaint();
}
}
}

pero solo me lee la posición inicial y luego no lee mas. Efectivamente si pongo el system out dentro del listener si se actualiza...¿como se hace para pasar el valor del listener al constructor?


Título: Re: problemas con jslider
Publicado por: Sanlegas en 31 Marzo 2013, 19:28 pm
Pon la clase2 del dibujo, tal vez no "actualizas" el valor nuevo del radio en el dibujo...