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

Odpowiedz Nowy wątek
2018-09-24 20:26
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ę! :)

Pozostało 580 znaków

2018-09-25 07:41
Pokrzywi
0
 slider1.addChangeListener(new ChangeListener() {
      public void stateChanged(ChangeEvent e) {
            int wartosc1 = slider1.getValue();
            int wartosc3 = slider3.getValue();
            slider2.setValue(wartosc3 -wartosc1 );
      }
    });

Pozostało 580 znaków

2018-09-25 19:54
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();
            }
        });

Pozostało 580 znaków

2018-09-26 06:39
Pokrzywi
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.

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