добавив два числа, данные JSliders - PullRequest
0 голосов
/ 26 апреля 2018

предположим, что мы хотим добавить два числа (0 <= n <= 20), которые пользователь указывает с двумя JSliders, и распечатать его. проблема в том, что когда я присваиваю значение JSliders переменным x и y, они просто не содержат новое значение и держат 0 (сначала они инициализируются с 0), вот код: </p>

import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;

public class GUIJframe extends JFrame {

    private JPanel jp1 = new JPanel();
    private JTextField jtf = new JTextField();
    private JTextField jtf2 = new JTextField();
    private JSlider js1 = new JSlider(0,20);
    private JSlider js2 = new JSlider(0,20);
    private int x = 0;
    private int y = 0;

    public GUIJframe () {

        setSize(400,400);
        setLocation(200,200);
        setLayout(new GridLayout(5,1));
        add(js1);
        add(jtf);
        add(js2);
        add(jtf2);
        Handler h = new Handler();
        Handler2 h2 = new Handler2();
        js1.addChangeListener(h);
        js2.addChangeListener(h2);
        setVisible(true);
        System.out.println(x + y);

    }

    private class Handler implements ChangeListener {
        @Override
        public void stateChanged(ChangeEvent e) {
            JSlider js = (JSlider) e.getSource();

            jtf.setText( "" + js.getValue() );
            x = js.getValue();
        }
    }
    private class Handler2 implements ChangeListener {
        @Override
        public void stateChanged(ChangeEvent e) {
            JSlider js = (JSlider) e.getSource();

            jtf2.setText( "" + js.getValue() );
            y = js.getValue();
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Если вы хотите напечатать сумму x и y при перемещении JSlider, переместите System.out.println(x+y);

в метод прослушивания изменения

Ниже приведен код: -

import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;

public class GUIJframe extends JFrame {

    private JPanel jp1 = new JPanel();
    private JTextField jtf = new JTextField();
    private JTextField jtf2 = new JTextField();
    private JSlider js1 = new JSlider(0,20);
    private JSlider js2 = new JSlider(0,20);
    private int x = 0;
    private int y = 0;

    public GUIJframe () {

        setSize(400,400);
        setLocation(200,200);
        setLayout(new GridLayout(5,1));
        add(js1);
        add(jtf);
        add(js2);
        add(jtf2);
        Handler h = new Handler();
        Handler2 h2 = new Handler2();
        js1.addChangeListener(h);
        js2.addChangeListener(h2);
        setVisible(true);
        //dont use print statement here

    }

    private class Handler implements ChangeListener {
        @Override
        public void stateChanged(ChangeEvent e) {
            JSlider js = (JSlider) e.getSource();

            jtf.setText( "" + js.getValue() );
            x = js.getValue();
            System.out.println(x + y);//use it here
        }
    }
    private class Handler2 implements ChangeListener {
        @Override
        public void stateChanged(ChangeEvent e) {
            JSlider js = (JSlider) e.getSource();

            jtf2.setText( "" + js.getValue() );
            y = js.getValue();
            System.out.println(x + y);//and here also
        }
    }
}
0 голосов
/ 26 апреля 2018

Вы печатаете x+y только один раз, когда оба x,y являются нулями, это еще до того, как вы передвинете ползунки. Вы можете добавить System.out.println(x + y); в Handler или Handler1, тогда при перемещении ползунка будет отображаться сумма.

...