package test;
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class SliderTest {
public static void main(String[] args) {
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new FlowLayout());
JSlider slider = new JSlider(0, 100, 10);
WzorZaleznyOdWartosciSlidera wzor = new WzorZaleznyOdWartosciSlidera("x + 17", 'x');
slider.addChangeListener(new ZmieniaczWzoru(wzor));
frame.add(slider);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
class WzorZaleznyOdWartosciSlidera {
private String wzor;
private char zmienna;
private Integer val;
public WzorZaleznyOdWartosciSlidera(String wzor, char zmienna) {
this.wzor = wzor;
this.zmienna = zmienna;
}
public void print() {
if (val == null) {
System.out.println(wzor);
} else {
System.out.println(wzor.replaceAll("" + zmienna, val.toString()));
}
}
public void setVal(Integer val) {
this.val = val;
print();
}
}
class ZmieniaczWzoru implements ChangeListener {
private WzorZaleznyOdWartosciSlidera wzor;
public ZmieniaczWzoru(WzorZaleznyOdWartosciSlidera wzor) {
this.wzor = wzor;
}
@Override
public void stateChanged(ChangeEvent evt) {
Integer val = (((JSlider)evt.getSource()).getValue());
wzor.setVal(val);
}
}
Podales bardzo malo informacji wiec nie wiem czy o to chodzi.
Moj przyklad tworzy jakistam wzor ze zmienna, we wzorze mozna pod zmienna podstawiac wartosc (nic szczegolnego, zwykle podmienianie stringow). Dodatkowo tworziny jest obserwator / listener ktory ma referencje do wzoru ktory ma byc zmieniany wraz ze zmiana wartosci slidera. Obserwator jest dodany do JSlidera, i gdy wartosc jest zmieniana to ustawiana jest we wzorze. Metoda setVal wola metode print ktora wypisuje na konsole aktualny wzor, abys widzial ze to dziala.
I tak, nie trzeba tworzyc zadnych wlasnych implementacji obserwatora, nie trzeba tez wystawiac nigdzie nowych wartosci slidera, wszystko "dzieje sie samo".