Swing Slider

javaxx

Mitglied
Hallo ich habe eine Frage:
Meine Aufgabeist ein JSlider der stufenlos den Frame bis zum doppelten Ausmaß vergrößert
Java:
        s = new JSlider(JSlider.HORIZONTAL, 0, 255, 0);
        s.setMajorTickSpacing(50);
        s.setMinorTickSpacing(10);
        s.setPaintTicks(true);
        s.setPaintLabels(false); t
        s.setSnapToTicks(true);
        s.setBounds(10,120,90,20);
        s.addChangeListener(this);
        this.getContentPane().add(s);

public void stateChanged(ChangeEvent e) {
        // TODO Auto-generated method stub
              s = (JSlider)e.getSource();
              int val=s.getValue();
               this.getContentPane().setSize(s.getValue()*(500*2),s.getValue()*(500*2));
        
        

    }
Ich habe es so versucht aber es geht nicht kann mir jemand weiterhelfen
 
Hier wäre evtl. immer wichtig zu sagen, was genau nicht geht. Was ist das Verhalten, das Du beobachtest hast. Das ursprüngliche Fenster ist 500x500?

Und besonders hilfreich ist es meist auch, wenn man ein minimales Beispiel bekommt, das das Problem zeigt und das man dann selbst lokal ausführen / testen kann.
 
Java:
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class MyJFrame extends JFrame implements ChangeListener{

    JSlider s;
    
    
     public MyJFrame() {
        super();
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setLayout(null);
        this.setBounds(0, 0, 500, 500);
        
        
    
        
    
        s = new JSlider(JSlider.HORIZONTAL, 0, 255, 0);
        s.setMajorTickSpacing(50);
        s.setMinorTickSpacing(10);
        s.setPaintTicks(true);
        s.setPaintLabels(false); 
        s.setSnapToTicks(true);
        s.setBounds(10,120,90,20);
        s.addChangeListener(this);
        this.getContentPane().add(s);
 
        this.setVisible(true);
        this.requestFocus();
              
    }
    @Override
    public void stateChanged(ChangeEvent e) {
        // TODO Auto-generated method stub
              s = (JSlider)e.getSource();
              int val=s.getValue();
               this.getContentPane().setSize(s.getValue()*(500*2),s.getValue()*(500*2));
 
    }
   
}
Ja die ursprüngliche Größe des Frames ist 500x500 wenn ich das ausführe kommt zwar der Slider
aber ich kann den Regler nach Rechts schiebe tut sich nichts
 
Also zwei Punkte, die ich sehe:
a) Du willst das Fenster in der Größe verändern - Fenster heisst JPanel und nicht ContentPane: this.setSize(....);
b) Slider liefert Werte von 0 bis 255. Daher musst Du das berücksichtigen. Also etwas wie:
Java:
int val=s.getValue() * 1000 / 255;
Eine minimale-Größe wirst Du bestimmt auch wollen - also etwas wie
Java:
if (val < 100) val = 100;

Edit: val wäre dann die Größe, also ein this.setSize(val,val);
 
Dann berechne doch den Faktor, um den es vergrößert werden soll. Wenn etwas von Ursprungsgröße bis zur Doppelten Größe gehen soll, was wäre das dann für Bereich für den Faktor?

Und nun bekommst Du Werte von 0 - 255 -> Wie kommst Du dann auf den Gewünschten Faktor?

Wenn Du einen Faktor hast, dann kannst Du die Ursprungsgröße * Faktor berechnen um die neue Größe zu erhalten.

Damit solltest Du alles an Wissen haben, das Du für die Umsetzung brauchst.
 
Dann berechne doch den Faktor, um den es vergrößert werden soll. Wenn etwas von Ursprungsgröße bis zur Doppelten Größe gehen soll, was wäre das dann für Bereich für den Faktor?

Und nun bekommst Du Werte von 0 - 255 -> Wie kommst Du dann auf den Gewünschten Faktor?

Wenn Du einen Faktor hast, dann kannst Du die Ursprungsgröße * Faktor berechnen um die neue Größe zu erhalten.

Damit solltest Du alles an Wissen haben, das Du für die Umsetzung brauchst.


Java:
import javax.swing.JPanel;


import javax.swing.JSlider;


import javax.swing.event.CaretListener;

import javax.swing.event.ChangeEvent;

import javax.swing.event.ChangeListener;


public class MyJFrame extends JFrame implements ChangeListener{


    JSlider s;


     JPanel panel;

  

  

     public MyJFrame() {

        super();

        setDefaultCloseOperation(EXIT_ON_CLOSE);

        this.setLayout(null);

        this.setBounds(0, 0, 500, 500);

      

      


        s = new JSlider(JSlider.HORIZONTAL, 0, 255, 0);

        s.setMajorTickSpacing(50);

        s.setMinorTickSpacing(10);

        s.setPaintTicks(true);

        s.setPaintLabels(false);

        s.setSnapToTicks(true);

        s.setBounds(10,120,90,20);

        s.addChangeListener(this);

  

        this.getContentPane().add(s);

      

        panel=new JPanel();

      

      

        this.setVisible(true);

        this.requestFocus();

      

      

  


      

    }

    @Override

    public void stateChanged(ChangeEvent e) {

        // TODO Auto-generated method stub

              s = (JSlider)e.getSource();

              int val=s.getValue();

               panel.setSize((500*2),(500*2));

      

      


    }




  

}


Also so?
 
Also zwei mögliche Antworten:

1) Hast Du es probiert? Macht es das, was es soll?


2) Nö, denn:
Du bekommst in val einen Wert von 0 bis 255. (ok, der Punkt ist noch ok)
Da ich nicht geschrieben habe "Den Wert vergisst Du einfach und setzt dann die Größe 1000, 1000" ist es wohl nicht das, was ich geschrieben habe ....

Ich habe ja zwei Fragen formuliert. Vielleicht fängst Du einfach mal an, diese zu beantworten. Dann kommen wir evtl. zusammen zu einer Lösung.
 
Also zwei mögliche Antworten:

1) Hast Du es probiert? Macht es das, was es soll?


2) Nö, denn:
Du bekommst in val einen Wert von 0 bis 255. (ok, der Punkt ist noch ok)
Da ich nicht geschrieben habe "Den Wert vergisst Du einfach und setzt dann die Größe 1000, 1000" ist es wohl nicht das, was ich geschrieben habe ....

Ich habe ja zwei Fragen formuliert. Vielleicht fängst Du einfach mal an, diese zu beantworten. Dann kommen wir evtl. zusammen zu einer Lösung.
Nein es geht nicht. Mit getValue kann man den aktuellen Wert des Sliderns auslesen
 

Zurück
Oben