Java JSpinner#承诺它不';t抛出语法异常
我有一个简单的微调器应用程序。微调器由一个微调器NumberModel和一个使用格式字符串“####”的JSpinner.numereditor创建: 我有一个提交过程,如下所示:Java JSpinner#承诺它不';t抛出语法异常,java,swing,Java,Swing,我有一个简单的微调器应用程序。微调器由一个微调器NumberModel和一个使用格式字符串“####”的JSpinner.numereditor创建: 我有一个提交过程,如下所示: try { spinner_.commitEdit(); System.out.println( "success" ); } catch ( ParseException exc ) { System.out.println( exc ); } 然而,无论我在编辑器中输入什么值(例如,
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()很抱歉,code>很愚蠢,但确实如此,您不应该在事件调度线程的上下文之外创建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 );
}
}
}