使用NetBeans 新建一个Swing Application Program,会自动生成如下的代码:
TaskMonitor:
TaskMonitor taskMonitor = new TaskMonitor ( getApplication ().getContext () ); taskMonitor.addPropertyChangeListener ( new java.beans.PropertyChangeListener () { public void propertyChange ( java.beans.PropertyChangeEvent evt ) { String propertyName = evt.getPropertyName (); if ( "started".equals ( propertyName ) ) { if ( !busyIconTimer.isRunning () ) { statusAnimationLabel.setIcon ( busyIcons[0] ); busyIconIndex = 0; busyIconTimer.start (); } progressBar.setVisible ( true ); progressBar.setIndeterminate ( true ); } else if ( "done".equals ( propertyName ) ) { busyIconTimer.stop (); statusAnimationLabel.setIcon ( idleIcon ); progressBar.setVisible ( false ); progressBar.setValue ( 0 ); } else if ( "message".equals ( propertyName ) ) { String text = ( String ) ( evt.getNewValue () ); statusMessageLabel.setText ( ( text == null ) ? "" : text ); messageTimer.restart (); } else if ( "progress".equals ( propertyName ) ) { int value = ( Integer ) ( evt.getNewValue () ); progressBar.setVisible ( true ); progressBar.setIndeterminate ( false ); progressBar.setValue ( value ); } } } );
新建自定义Task,用于和TaskMonitor关联使用,实例代码:
@Action public Task doCount () { DoCountTask task = new DoCountTask ( getApplication () ); // ApplicationContext C = getApplication().getContext(); // TaskMonitor M = C.getTaskMonitor(); // TaskService S = C.getTaskService(); // M.setForegroundTask(task); return task; } private class DoCountTask extends org.jdesktop.application.Task<Object, Void> { DoCountTask ( org.jdesktop.application.Application app ) { // Runs on the EDT. Copy GUI state that // doInBackground() depends on from parameters // to DoCountTask fields, here. super ( app ); } @Override protected Object doInBackground () { // Your Task's code here. This method runs // on a background thread, so don't reference // the Swing GUI from here. countMenuItem.setEnabled ( false ); statusMessageLabel.setText ( "Counting ..." ); for ( int i = 0; i <= 100; i++ ) { countLabel.setText ( "... " + i + " ..." ); try { Thread.sleep ( 50 ); } catch ( InterruptedException e ) { countLabel.setText ( e.toString () ); break; } } statusMessageLabel.setText ( "OK!" ); countMenuItem.setEnabled ( true ); return null; // return your result } @Override protected void succeeded ( Object result ) { // Runs on the EDT. Update the GUI based on // the result computed by doInBackground(). } }
将上述的@Action注解的方法,绑定到某个控件即可触发事件,并实现DoCountTask和TaskMonitor关联并起作用。