添加JSliders给出的两个数字

时间:2018-04-26 08:45:42

标签: java add jslider

假设我们想要添加两个数字(0 <= n <= 20),用户使用两个JSliders指定并打印它。问题是当我指定JSliders&#39;对x和y变量的值,它们只是不保持新值并保持0(首先它们用0初始化),这里是代码:

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 :(得分:2)

x+y都为0时,您只打印x,y一次,这是在您移动滑块之前。 您可以在System.out.println(x + y);Handler中添加Handler1,如果移动滑块,则会显示总和。

答案 1 :(得分:0)

如果要在移动JSlider时打印x和y的总和,请移动char const *const input = "1,1,5,1,1,1,0,0,6,6,1,1,1,0,1,0,13,4,7,8,18,20,,,,,,,,,,,,,,,,,,,,,,\n" "1,1,5,1,1,1,0,1,6,5,1,1,1,0,1,0,4,7,8,18,20,,,,,,,,,,,,,,,,,,,,,,,\n" "1,1,5,1,1,1,0,2,6,5,1,1,1,0,1,0,4,7,8,18,20,,,,,,,,,,,,,,,,,,,,,,,\n" "1,1,5,1,1,1,0,3,6,5,1,1,1,0,1,0,13,4,7,8,20,,,,,,,,,,,,,,,,,,,,,,,\n" "1,1,5,1,1,1,0,4,6,5,1,1,1,0,1,0,13,4,7,8,20,,,,,,,,,,,,,,,,,,,,,,,\n" "1,1,5,1,1,1,0,5,6,4,1,0,1,0,1,0,4,8,18,20,,,,,,,,,,,,,,,,,,,,,,,,\n" "1,1,5,1,1,1,0,6,6,5,1,1,1,0,1,0,4,7,8,18,20,,,,,,,,,,,,,,,,,,,,,,,\n" "1,1,5,1,1,1,0,7,6,5,1,1,1,0,1,0,13,4,7,8,20,,,,,,,,,,,,,,,,,,,,,,,\n" "1,1,5,1,1,1,0,8,6,5,1,1,1,0,1,0,13,4,7,8,20,,,,,,,,,,,,,,,,,,,,,,,\n" "1,1,5,1,1,2,0,0,12,12,1,2,4,1,1,0,13,4,7,8,18,20,21,25,27,29,31,32,,,,,,,,,,,,,,,,\n"; #include <stdio.h> #define SKIP_FIELD "%*[^,]," #define DECIMAL_FIELD "%d," int read() { int n; /* bytes read - not needed for file or stdin */ int sum = 0; /* just to make sure results are used */ for (char const *s = input; *s; ) { int nfields; int array[28]; int m = sscanf(s, /* field 0 is missing */ SKIP_FIELD SKIP_FIELD SKIP_FIELD SKIP_FIELD SKIP_FIELD SKIP_FIELD SKIP_FIELD SKIP_FIELD SKIP_FIELD DECIMAL_FIELD /* field 10 */ SKIP_FIELD SKIP_FIELD SKIP_FIELD SKIP_FIELD SKIP_FIELD SKIP_FIELD "%n", &nfields, &n); if (m != 1) { return -1; } s += n; static const char fieldchars[] = DECIMAL_FIELD; static const size_t fieldsize = sizeof fieldchars - 1; /* ignore terminating null */ static const char *const parse_entries = DECIMAL_FIELD DECIMAL_FIELD DECIMAL_FIELD DECIMAL_FIELD DECIMAL_FIELD DECIMAL_FIELD DECIMAL_FIELD DECIMAL_FIELD DECIMAL_FIELD DECIMAL_FIELD DECIMAL_FIELD DECIMAL_FIELD DECIMAL_FIELD DECIMAL_FIELD DECIMAL_FIELD DECIMAL_FIELD DECIMAL_FIELD DECIMAL_FIELD DECIMAL_FIELD DECIMAL_FIELD DECIMAL_FIELD DECIMAL_FIELD DECIMAL_FIELD DECIMAL_FIELD DECIMAL_FIELD DECIMAL_FIELD DECIMAL_FIELD DECIMAL_FIELD "[^\n] "; const char *const line_parse = parse_entries + (28-nfields) * fieldsize; /* now read nfields (max 28) */ m = sscanf(s, line_parse, &array[0], &array[1], &array[2], &array[3], &array[4], &array[5], &array[6], &array[7], &array[8], &array[9], &array[10], &array[11], &array[12], &array[13], &array[14], &array[15], &array[16], &array[17], &array[18], &array[19], &array[20], &array[21], &array[22], &array[23], &array[24], &array[25], &array[26], &array[27]); if (m != nfields) { return -1; } /* advance stream position */ sscanf(s, "%*[^\n] %n", &n); s += n; /* use the results */ for (int i = 0; i < nfields; ++i) { sum += array[i]; } } return sum; } #undef SKIP_FIELD #undef DECIMAL_FIELD int main() { int sum = 0; for (int i = 0; i < 1000000; ++i) { sum += read() * (i&1 ? 1 : - 1); /* alternate add and subtract */ } return sum != 0; }

改变监听器方法

以下是代码: -

System.out.println(x+y);