Przekazanie wartości z JSlider do obiektu Rectangle2D

Odpowiedz Nowy wątek
2011-08-16 21:48
0

Witam,
ma ktoś pomysł na przekazanie wartości z JSlidera do obiektu Rectangle2D aby zmienić np. jego wartość "x" bo mój nie działa?

class SliderFrame extends JFrame{
public SliderFrame() {
        gr = new Grafika();
        add(gr, BorderLayout.CENTER);
 
        panel = new JPanel();
        add(panel, BorderLayout.EAST);
 
        slider = new JSlider(JSlider.VERTICAL,0, 100,0);
        slider.addChangeListener(new ChangeListener() {
 
            @Override
            public void stateChanged(ChangeEvent e) 
            {
                gr.setValue(slider.getValue());
            }
        });
        panel.add(slider,BorderLayout.EAST);
    }
}
 
class Grafika extends JComponent {
 
    Shape sh1;
    public int value;
 
    public Grafika() {
        sh1 = new Rectangle2D.Double(value, 100, 150, 150);
    }
 
    @Override
    public void paintComponent(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
 
        g2.setPaint(Color.GREEN);
        g2.fill(sh1);
    }
 
    public void setValue(int v){
        v = value;
        repaint();
    }
 
}
 

W innych wątkach na tym forum i nie tylko nie znalazłem.

edytowany 2x, ostatnio: szypxx, 2011-08-16 21:57

Pozostało 580 znaków

2011-08-17 10:08
bo
0

Tworzysz prostokąt w konstruktorze klasy Grafika i nigdzie nie zmieniasz rozmiarów tego prostokąta, zmieniasz tylko wartość pola value.

Dokładniej: przy tworzeniu prostokąta jest podstawiana aktualnie znajdująca się w "value" wartość, potem, gdy jest ona zmieniana, prostokąt o tym nie wie. Musisz ponownie utworzyć prostokąt, ale z użyciem nowej wartości "value" :) - [losowa nazwa] 2011-08-17 12:29

Pozostało 580 znaków

2011-08-17 21:59
0

@ bo - ja właśnie myślałem tak jak losowa nazwa że zmieniam value i ta value "idzie" od razu do Rectangla i że on o tym wie. Tylko nie wiem jak z tym drugim.
@ [losowa nazwa] - ale gdzie mam utworzyć ten nowy Rect? Tego nie kumam. Możesz mi to przybliżyć? Jak to ma wyglądać?

edytowany 3x, ostatnio: szypxx, 2011-08-17 22:42

Pozostało 580 znaków

2011-08-18 14:05
bo
0

Rectangle nie wie o zmianie wartości value.
Do zmiany parametrów Rectangle'a służy metoda setFrame(...). Niech metoda setValue() z klasy Grafika wywołuje metodę setFrame().

Pozostało 580 znaków

2011-08-19 23:45
0

Niestety ta metoda nie jest możliwa do wywołania ani w tej metodzie ani w innej bo NB nie podpowiada nawet istnienia tej metody więc nadal nie wiem jak to zrobić:(

Pozostało 580 znaków

2011-08-20 08:07
bo
0

To czy można użyć metodę zależy tylko od tego czy metoda istnieje i jest dostępna (public, protected, ...). Fakt, że NB jej nie podpowiada nie ma żadnego wpływu na możliwość użycia metody.
http://download.oracle.com/javase/7/docs/api/java/awt/geom/Rectangle2D.Double.html
Masz do wyboru metody setRect() i setFrame().

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0