Explanation
I've created an example of my current project, but in SSCCE form.
CODE WAS UPDATED:
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.WindowConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class Test2 extends JFrame{
private Panels panel1, panel2;
public Test2(){
init();
}
private void init(){
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setLayout(new GridLayout(0,1));
panel1 = new Panels("Test1");
panel2 = new Panels("Test2");
add(panel1.getPanel());
add(panel2.getPanel());
pack();
setVisible(true);
}
public class Panels {
private JSlider slider;
private JPanel panel;
private JLabel label;
private ChangeListener changeListener;
private PropertyChangeSupport changeSup;
public Panels(String text){
slider = new JSlider();
slider.setMajorTickSpacing(50);
slider.setMaximum(255);
slider.setMinorTickSpacing(10);
slider.setPaintLabels(true);
slider.setPaintTicks(true);
setSliderValue(0);
label = new JLabel();
label.setText("0");
changeListener = new ChangeListener(){
@Override
public void stateChanged(ChangeEvent e) {
setLabelText(String.valueOf(getSliderValue()));
}
};
slider.addChangeListener(changeListener);
panel = new JPanel();
panel.add(label);
panel.add(slider);
}
public final int getSliderValue() {
return slider.getValue();
}
public final void setSliderValue(int value) {
slider.setValue(0);
}
public final String getLabelText() {
return label.getText();
}
public final void setLabelText(String text) {
String oldLabelText = getLabelText();
label.setText(text);
changeSup.firePropertyChange("value", oldLabelText, getLabelText());
}
public void
addPropertyChangeListener(PropertyChangeListener listener){
changeSup.addPropertyChangeListener("value", listener);
}
public void
removePropertyChangeListener(PropertyChangeListener listener){
changeSup.removePropertyChangeListener("value", listener);
}
public final JPanel getPanel(){
return panel;
}
}
public static void main(String[] args) {
try {
for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
}
catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
Logger.getLogger(Test2.class.getName()).log(Level.SEVERE, null, ex);
}
EventQueue.invokeLater(new Runnable() {
public void run() {
new Test2();
}
});
}
}
Note again this is an SSCCE, extremely barebones. The idea is there though.
Basically the above code creates a JFrame
with 2 JSlider
s that update a JLabel
with a Listener
. What I'm trying to get working is some way of updating another component based on the two values from the JSliders
.
What Should I Do
I'm thinking I should be creating a Bound Property
, but am unfamiliar in that area of Java.
If this isn't a good way to go about it, I'm open to suggestions.