简体   繁体   English

如何为JSpinner使用ChangeListener?

[英]how to use ChangeListener for JSpinner?

private String[]fontsizelist = {"10","15","20"};
private SpinnerListModel spinmodel = new SpinnerListModel(fontsizelist);
private JSpinner fontsizeitem= new JSpinner(spinmodel);
//Constructor

some codes


         fontsizeitem.addChangeListener(new ChangeListener(){

        public void stateChanged(ChangeEvent e){
            for(int i=0;i<fontsizelist.length;i++){
                fontsizeitem [i]=new JSpinner(fontsizelist[i]);<-shows error 
            }
        }
    });

This code shows me an error message 此代码显示了一条错误消息

array required, but JSpinner found 需要数组,但发现JSpinner

I know what is the problem but I have no idea how should I fix. 我知道问题出在哪里,但我不知道该如何解决。

I am using a string array because an integer array did not work with 我使用的是字符串数组,因为整数数组无法使用

SpinnerNumberModel and SpinnerListModel. SpinnerNumberModel和SpinnerListModel。

The font size should be changed automatically when the state of JSpinner is 当JSpinner的状态为时,字体大小应自动更改

changed. 改变。 How should I do in my case? 我该怎么办?

You should start with How to Use Spinners 您应该从如何使用微调框开始

A SpinnerNumberModel setup right (min of 10 , max of 20 and a step of 5 ) would give you the same result as your fontsizelist SpinnerNumberModel设置权(最小为10 ,最大为20 ,步长为5 )将为您提供与fontsizelist相同的结果

The basic idea is, the JSpinner will notify your ChangeListener when the value is changed, from that, you need to get a reference of the JSpinner and get it's current value, for example... 基本思想是,当值更改时, JSpinner会通知您的ChangeListener ,例如,您需要获取JSpinner的引用并获取其当前值,例如...

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
            SpinnerNumberModel model = new SpinnerNumberModel(10, 10, 20, 5);
            JSpinner spinner = new JSpinner(model);
            add(spinner);

            spinner.addChangeListener(new ChangeListener() {
                @Override
                public void stateChanged(ChangeEvent e) {
                    JSpinner spinner = (JSpinner) e.getSource();
                    int value = (int)spinner.getValue();
                    System.out.println("Value is " + value);
                }
            });
        }

    }

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM