Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSpinner#承诺它不';t抛出语法异常_Java_Swing - Fatal编程技术网

Java JSpinner#承诺它不';t抛出语法异常

Java JSpinner#承诺它不';t抛出语法异常,java,swing,Java,Swing,我有一个简单的微调器应用程序。微调器由一个微调器NumberModel和一个使用格式字符串“####”的JSpinner.numereditor创建: 我有一个提交过程,如下所示: try { spinner_.commitEdit(); System.out.println( "success" ); } catch ( ParseException exc ) { System.out.println( exc ); } 然而,无论我在编辑器中输入什么值(例如,

我有一个简单的微调器应用程序。微调器由一个微调器NumberModel和一个使用格式字符串“####”的JSpinner.numereditor创建:

我有一个提交过程,如下所示:

try
{
    spinner_.commitEdit();
    System.out.println( "success" ); 
}
catch ( ParseException exc )
{
    System.out.println( exc ); 
}
然而,无论我在编辑器中输入什么值(例如,“nuts”),我都不会得到ParseException;提交将导致值还原为以前提交的值,但不会引发异常。我做错了什么

下面是示例程序

public class TestSpinner
    implements Runnable
{
    private final JFrame    frame_;
    private final JSpinner  spinner_;

    public static void main(String[] args)
    {
        new Thread( new TestSpinner() ).start();
    }

    public TestSpinner()
    {
        frame_ = new JFrame( "Spinner Test" );
        spinner_ = new JSpinner( new SpinnerNumberModel( 0, 0, 500, 1 ) );
        spinner_.setEditor( new JSpinner.NumberEditor( spinner_, "###" ) );        
    }

    public void run()
    {
        JPanel  panel   = new JPanel( new GridLayout( 2, 1 ) );
        frame_.getContentPane().add( panel );

        JButton okButton    = new JButton( "OK" );
        okButton.addActionListener( x -> commit() );

        panel.add( spinner_ );
        panel.add( okButton );
        frame_.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        frame_.pack();
        frame_.setVisible( true );
    }

    public void commit()
    {
        try
        {
            spinner_.commitEdit();
            System.out.println( "success" ); 
        }
        catch ( ParseException exc )
        {
            System.out.println( exc ); 
        }
    }
}

JSpinner
在调用
commit
方法之前已经过验证,因此,当它的值无效时,它会返回到最后一个已知的有效值。一般来说,在这种情况下,您不需要调用commit,因为字段在focus lostOh上是“已验证”的,并且这
是新线程(new TestSpinner()).start()很愚蠢,但确实如此,您不应该在事件调度线程的上下文之外创建UI,请查看如何启动GUI以获取帮助。
public class TestSpinner
    implements Runnable
{
    private final JFrame    frame_;
    private final JSpinner  spinner_;

    public static void main(String[] args)
    {
        new Thread( new TestSpinner() ).start();
    }

    public TestSpinner()
    {
        frame_ = new JFrame( "Spinner Test" );
        spinner_ = new JSpinner( new SpinnerNumberModel( 0, 0, 500, 1 ) );
        spinner_.setEditor( new JSpinner.NumberEditor( spinner_, "###" ) );        
    }

    public void run()
    {
        JPanel  panel   = new JPanel( new GridLayout( 2, 1 ) );
        frame_.getContentPane().add( panel );

        JButton okButton    = new JButton( "OK" );
        okButton.addActionListener( x -> commit() );

        panel.add( spinner_ );
        panel.add( okButton );
        frame_.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        frame_.pack();
        frame_.setVisible( true );
    }

    public void commit()
    {
        try
        {
            spinner_.commitEdit();
            System.out.println( "success" ); 
        }
        catch ( ParseException exc )
        {
            System.out.println( exc ); 
        }
    }
}