2016-06-12 5 views
1

JAVAプログラムのセクションで、ボタンをクリックすると、actionListenerは次のプロセスを実行する必要があります。DefaultListModelは、自分のアクションリストのアクションの順序をオーバーライドしていますか?

  1. 変更「スタンバイ」
  2. は、それがデータをソートしてはaddElementを経由して、それを返す(メソッドを実行するプロセスが
  3. を開始したことを知らせるパネルにラベルを追加するには、「スタート」からボタンのテキストdefaultListModelのJListに、そして最終的に
  4. 変更「スタート」から、ボタン上のテキストが

    012以下のとおり

を「完了」を

ただし、ボタンを押すと、ボタンのテキストは変更されず、ラベルは表示されませんが、メソッドが実行されます。メソッドが完了した場合にのみ、ボタンのテキストは「完了」(「スタンバイ」は表示されません)に変わり、「プロセスが開始されました。スタンバイ」というラベルが表示されます。

これは、すべての機能やコーディングの未経験よりも優先されるdefaultlistmodelの機能ですか?

また、メソッドで解析されるデータは、一度にJListに表示され、各要素ではなく、一度に表示されます。分析されたデータがリストに表示された場合、少なくとも何かが起きていることが示されます。これはdefaultListModelでは不可能ですか?事前に

多くのおかげ
PG

答えて

2

が、これはすべてのものか、私のコーディング経験不足よりも優先されますdefaultlistmodelの特徴ですか?

これは、DefaultListModelとはまったく関係がありません。また、すべてがシングルスレッドのSwingとは関係ありません。長時間実行されているプロセスがSwingイベントスレッド上で実行されており、GUI上にテキストやイメージを描画したり、ユーザーと対話したりするなど、このスレッドが必要なアクションを実行しないようにします。

解決策は、SwingWorkerで取得できるバックグラウンドスレッドを使用し、このバックグラウンドスレッドで長時間実行するコードを実行し、終了時に通知されるPropertyChangeListenerをワーカーに追加してから応答しますお知らせ。

uploadNotamButton.addActionListener((ActionEvent e) -> { 
    // if(e.getSource()==uploadNotamButton) 
    uploadNotamButton.setText("STANDBY"); 
    progressLabel.setText("Process Has Begun, standby..."); 
    progressLabel.setVisible(true); 

    // create worker to do background work 
    SwingWorker<Void, Void> worker = new SwingWorker<>() { 
     @Override 
     protected Void doInBackground() throws Exception { 
      // this is all done within a background thread 
      uploadNotams(); // don't make any Swing calls from within this method 
      return null; 
     } 
    }; 

    // get notified when the worker is done, and respond to it 
    worker.addPropertyChangeListener(new PropertyChangeListener() { 
     @Override 
     public void propertyChange(PropertyChangeEvent evt) { 
      if (evt.getNewValue == SwingWorker.StateValue.DONE) { 
       uploadNotamButton.setText("COMPLETE"); 

       // the code below needs to be surrounded by a try/catch block 
       // and you'll need to handle any exceptions that might be caught 
       ((SwingWorker) evt.getSource()).get(); 
      } 
     } 
    }); 
    worker.execute(); // run the worker 
}); 
+0

例えば(コードがテストされていない)が、それは完全に働いた、どうもありがとうございます。私は本があなたのことを簡単に説明してくれることを望みました。 – pgee75

+0

@ pgee75:あなたは歓迎され、喜んで助けてくれました。 –

関連する問題