package io.swtc.proccessing.ui; import javax.swing.*; import javax.swing.border.EmptyBorder; import java.awt.*; public class LabeledSlider extends JPanel { private final JSlider slider; private final JLabel label; private final String title; private final String unit; public LabeledSlider(String title, int min, int max, int value, String unit) { this.title = title; this.unit = unit; setLayout(new BorderLayout()); label = new JLabel(title + ": " + value + unit); slider = new JSlider(min, max, value); // Internal listener to update the text label as user drags slider.addChangeListener(e -> updateLabel()); add(label, BorderLayout.NORTH); add(slider, BorderLayout.CENTER); setBorder(new EmptyBorder(5, 0, 5, 0)); } private void updateLabel() { label.setText(title + ": " + slider.getValue() + unit); } public int getValue() { return slider.getValue(); } public void setValue(int val) { slider.setValue(val); updateLabel(); } public JSlider getSlider() { return slider; } public void addChangeListener(javax.swing.event.ChangeListener cl) { slider.addChangeListener(cl); } }