JSlider- jak ustawić wartość jako sumę wartości dwóch innych Sliderów

0

Cześć,
jak mając kilka Sliderów (dajmy na to 3) ustawić wartość jednego z nich jako sumę wartości dwóch pozostałych. Tzn tak, aby zmieniając wartość tych dwóch, wartość trzeciego ustawiała się automatycznie.

Mam problem z poniższym kodem, chcę aby wartość JSlider poj była sumą wartości JSlider stala i JSlider napiecie. Program się kompliuje, ale wartość na suwaczku się nie zmienia. + nie wiem dlaczego, ale nie pojawiają się JLabel'e przy niektórych suwaczkach (a kod napisany jest analogicznie do tych, przy których się pojawiają)

public class Configurations extends javax.swing.JFrame {

	public Configurations() {
		
		initComponents();
		
    }
	
    private void initComponents() {
    	
    	options1 = new JPanel();
        options2 = new JPanel();
    	buttons = new JPanel();
        labelPowierzchnia = new JLabel();
        labelNapiecie = new JLabel();
        labelOdleglosc = new JLabel();
        labelStala = new JLabel();
        powierzchnia = new JSlider();
        napiecie = new JSlider();
        odleglosc = new JSlider();
        stala = new JSlider();
        napiecieSI = new JLabel();
        odlegloscSI = new JLabel();
        powierzchniaSI = new JLabel();
        stalaSI = new JLabel();
        pojSI = new JLabel();
        labelPojemnosc = new JLabel();
        poj = new JSlider();
       
        closeButton = new JButton();

        buttons.add(closeButton);
  
  
        
        options1.add(labelNapiecie);
        options1.add(napiecieSI);
        options1.add(napiecie);
        options1.add(labelOdleglosc);
        options1.add(odlegloscSI);
        options1.add(odleglosc);
        options2.add(labelPowierzchnia);
        options2.add(powierzchnia);
        options2.add(labelStala);
        options2.add(stala);
        options2.add(poj);
        options2.add(labelPojemnosc);
        
        
    
        this.setLayout(new BoxLayout(this.getContentPane(), BoxLayout.Y_AXIS));
		add(options1);
		add(options2);
		
		add(buttons);

//ZD
        labelNapiecie.setText("ustaw napiecie");
        napiecieSI.setText("380 nm");
        napiecie.setMajorTickSpacing(500);
        napiecie.setMaximum(400);
        napiecie.setMinimum(-400);
        napiecie.setMinorTickSpacing(50);
        napiecie.setPaintLabels(true);
        napiecie.setPaintTicks(true);
        napiecie.addChangeListener(new ChangeListener() {
            public void stateChanged(ChangeEvent evt) {
            	JSlider source1 = (JSlider)evt.getSource();
            	napiecieSI.setText(Integer.toString(source1.getValue())+" V");
            	
            }
        });
        
        labelOdleglosc.setText("Wybierz odleglosc miedzy okladkami (1-30):");
        odlegloscSI.setText("10");
        odleglosc.setMajorTickSpacing(4);
        odleglosc.setValue(10);
        odleglosc.setMaximum(30);
        odleglosc.setMinorTickSpacing(1);
        odleglosc.setPaintLabels(true);
        odleglosc.setPaintTicks(true);        
        odleglosc.addChangeListener(new ChangeListener() {
            public void stateChanged(ChangeEvent evt) {
            	JSlider source2 = (JSlider)evt.getSource();
            	odlegloscSI.setText(Integer.toString(source2.getValue()));
            	
            }
        });
        
        labelPowierzchnia.setText("Ustaw powierzchnie okladek (1-30): ");
        powierzchniaSI.setText("10");
        powierzchnia.setMajorTickSpacing(4);
        powierzchnia.setValue(10);
        powierzchnia.setMaximum(30);
        powierzchnia.setMinorTickSpacing(1);
        powierzchnia.setPaintLabels(true);
        powierzchnia.setPaintTicks(true);        
        powierzchnia.addChangeListener(new ChangeListener() {
            public void stateChanged(ChangeEvent evt) {
            	JSlider source3 = (JSlider)evt.getSource();
            	powierzchniaSI.setText(Integer.toString(source3.getValue()));
            	
            }
        });
        
        labelStala.setText("Wybierz stala dielektryczna (1-5) ");
        stalaSI.setText("4");
        stala.setMajorTickSpacing(4);
        stala.setValue(2);
        stala.setMaximum(5);
        stala.setMinorTickSpacing(1);
        stala.setPaintLabels(true);
        stala.setPaintTicks(true);        
        stala.addChangeListener(new ChangeListener() {
            public void stateChanged(ChangeEvent evt) {
            	JSlider source4 = (JSlider)evt.getSource();
            	stalaSI.setText(Integer.toString(source4.getValue()));
            	
            }
        });
        
        labelPojemnosc.setText("Pojemnosc kondensatora");
        pojSI.setText("0");
        pojSI.setVisible(true);
        poj.setMajorTickSpacing(1);
        poj.setMinorTickSpacing(1);
        poj.setPaintTicks(true);
        poj.setPaintTrack(true);
        poj.setAutoscrolls(true);
        poj.setPreferredSize(new Dimension(500,500));
        poj.addChangeListener(new ChangeListener() {
            public void stateChanged(ChangeEvent evt) {
            	JSlider stala = (JSlider)evt.getSource();
            	JSlider napiecie = (JSlider)evt.getSource();
            	pojSI.setText(Integer.toString(stala.getValue())+Integer.toString(napiecie.getValue()));
            	
            }
        });
        //Integer.parseInt()
         
     //pojemnosc.setText(String.valueOf(poj.getValue()));

 //ZD
      
		
		
        closeButton.setText("Exit");
        closeButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                dispose();
            }
        });
        
       
 
        pack();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setTitle("Kondensator");
	
    }            
 
   
    private JButton closeButton;
    private JLabel labelPowierzchnia;
    private JLabel labelNapiecie;
    private JLabel labelOdleglosc;
    private JLabel labelPojemnosc;
    private JLabel labelStala;
    private JPanel options1;
    private JPanel options2;
    private JPanel buttons;
    private JSlider napiecie;
    private JSlider odleglosc;
    private JSlider powierzchnia;
    private JSlider stala;
    private JSlider poj;
    private JLabel napiecieSI;
    private JLabel odlegloscSI;
    private JLabel powierzchniaSI;
    private JLabel stalaSI;
    private JLabel pojSI;
                 
}

pomóżcie proszę! :)

0
 slider1.addChangeListener(new ChangeListener() {
      public void stateChanged(ChangeEvent e) {
            int wartosc1 = slider1.getValue();
            int wartosc3 = slider3.getValue();
            slider2.setValue(wartosc3 -wartosc1 );
      }
    });
0

niestety tak też nie działa. Czy slider3 musi być zdefiniowany na początku kodu, czy wystarczy że definiuję go w ChangeListener?

package ciasteczka;

import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.JTextField;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class Configurations extends javax.swing.JFrame {

	public Configurations() {
		
		initComponents();
		
    }
	
    private void initComponents() {
    	
    	options1 = new JPanel();
        options2 = new JPanel();
    	buttons = new JPanel();
        labelPowierzchnia = new JLabel();
        labelNapiecie = new JLabel();
        labelOdleglosc = new JLabel();
        labelStala = new JLabel();
        powierzchnia = new JSlider();
        napiecie = new JSlider();
        odleglosc = new JSlider();
        stala = new JSlider();
        napiecieSI = new JLabel();
        odlegloscSI = new JLabel();
        powierzchniaSI = new JLabel();
        stalaSI = new JLabel();
        pojSI = new JLabel();
        labelPojemnosc = new JLabel();
        poj = new JSlider();
        JSlider source1 = new JSlider();
        JSlider source2 = new JSlider();
        closeButton = new JButton();

        buttons.add(closeButton);
  
  
        
        options1.add(labelNapiecie);
        options1.add(napiecieSI);
        options1.add(napiecie);
        options1.add(labelOdleglosc);
        options1.add(odlegloscSI);
        options1.add(odleglosc);
        options2.add(labelPowierzchnia);
        options2.add(powierzchnia);
        options2.add(labelStala);
        options2.add(stala);
        options2.add(poj);
        options2.add(labelPojemnosc);
        
        
    
        this.setLayout(new BoxLayout(this.getContentPane(), BoxLayout.Y_AXIS));
		add(options1);
		add(options2);
		
		add(buttons);

//ZD
        labelNapiecie.setText("ustaw napiecie");
        napiecieSI.setText("380 nm");
        napiecie.setMajorTickSpacing(500);
        napiecie.setMaximum(400);
        napiecie.setMinimum(-400);
        napiecie.setMinorTickSpacing(50);
        napiecie.setPaintLabels(true);
        napiecie.setPaintTicks(true);
        napiecie.addChangeListener(new ChangeListener() {
            public void stateChanged(ChangeEvent evt) {
            	JSlider source1 = (JSlider)evt.getSource();
            	napiecieSI.setText(Integer.toString(source1.getValue())+" V");
            	
            }
        });
        
        labelOdleglosc.setText("Wybierz odleglosc miedzy okladkami (1-30):");
        odlegloscSI.setText("10");
        odleglosc.setMajorTickSpacing(4);
        odleglosc.setValue(10);
        odleglosc.setMaximum(30);
        odleglosc.setMinorTickSpacing(1);
        odleglosc.setPaintLabels(true);
        odleglosc.setPaintTicks(true);        
        odleglosc.addChangeListener(new ChangeListener() {
            public void stateChanged(ChangeEvent evt) {
            	JSlider source2 = (JSlider)evt.getSource();
            	odlegloscSI.setText(Integer.toString(source2.getValue()));
            	
            }
        });
        
        labelPowierzchnia.setText("Ustaw powierzchnie okladek (1-30): ");
        powierzchniaSI.setText("10");
        powierzchnia.setMajorTickSpacing(4);
        powierzchnia.setValue(10);
        powierzchnia.setMaximum(30);
        powierzchnia.setMinorTickSpacing(1);
        powierzchnia.setPaintLabels(true);
        powierzchnia.setPaintTicks(true);        
        powierzchnia.addChangeListener(new ChangeListener() {
            public void stateChanged(ChangeEvent evt) {
            	JSlider source3 = (JSlider)evt.getSource();
            	powierzchniaSI.setText(Integer.toString(source3.getValue()));
            	
            }
        });
        
        labelStala.setText("Wybierz stala dielektryczna (1-5) ");
        stalaSI.setText("4");
        stala.setMajorTickSpacing(4);
        stala.setValue(2);
        stala.setMaximum(5);
        stala.setMinorTickSpacing(1);
        stala.setPaintLabels(true);
        stala.setPaintTicks(true);        
        stala.addChangeListener(new ChangeListener() {
            public void stateChanged(ChangeEvent evt) {
            	JSlider source4 = (JSlider)evt.getSource();
            	stalaSI.setText(Integer.toString(source4.getValue()));
            	
            }
        });
        
        labelPojemnosc.setText("Pojemnosc kondensatora");
        pojSI.setText("0");
        pojSI.setVisible(true);
        poj.setMajorTickSpacing(1);
        poj.setMinorTickSpacing(1);
        poj.setPaintTicks(true);
        poj.setPaintTrack(true);
        poj.setAutoscrolls(true);
        poj.setPreferredSize(new Dimension(500,500));
        poj.addChangeListener(new ChangeListener() {
            public void stateChanged(ChangeEvent evt) {
            	  int wartosc1 = poj.getValue();
            	  int wartosc3 = source2.getValue();
            	  poj.setValue(wartosc3 -wartosc1 );
            	     
            }
        });
   
        closeButton.setText("Exit");
        closeButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                dispose();
            }
        });
0

Nie spisuj bezmyślnie kod tylko zrób go na podstawie ale żeby wykonywał to co masz na myśli.

poj.addChangeListener(new ChangeListener() {
            public void stateChanged(ChangeEvent evt) {
                  int napienie_val= napiecie .getValue();
                  int stala_val= stala.getValue();
                  poj.setValue(napienie_val+stala_val);

            }
        });

To powinno działać jeśli wszystko w innej części kodu masz poprawnie dodane, tzn. elementy dodane do okna.

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