2016-06-27 1 views
-1

目的JavaのJToggleButtonが

を押している間、私はスイングでJToggleButtonが押下された時間のためのメソッドを呼びますコードを達成しようとしている方法を実行します。 メソッドは、List<Integer>を返し、List<Integer>になります。

制限

Random_gen_Buttonは、そのように宣言や原因、それを守るのNetBeansへの変更不可能です。メモ帳を使って変更することはできますが、私はそれを変更することはできません。

private JToggleButton RANDOMGENBUTTON; 

コード

private void RANDOMGENBUTTONActionPerformed(java.awt.event.ActionEvent evt) {            
    if(RANDOMGENBUTTON.isSelected()) { 
     EXITBUTTON.setEnabled(false); 
     List<Integer> INPUTLIST = new ArrayList<Integer>(); 
     while(RANDOMGENBUTTON.isSelected()) { 
      INPUTLIST = MainCode.intGenerate(INPUTLIST); 
     } 
    }else { 
     EXITBUTTON.setEnabled(true); 
    } 
} 

解決策

私は、これは別のスレッドで達成可能であるべきだと思うが、私はこれを行う方法を確認していません。

エラー

それはGUIがフリーズするので、このコードは動作しません、私は再び無限ループが生じJToggleボタンを押すことができません。

編集

intGenerate()

public static List<Integer> intGenerate(List<Integer> INLIST) { 
     Random Rand = new Random(); 
     int RANDOMNUM = Rand.nextInt((9999999 - 1000000) + 1) + 1000000; 
     if(INLIST.isEmpty()) { 
      INLIST.add(randomNum); 
     }else { 
      while(INLIST.contains(randomNum)==true) { 
       RANDOMNUM = Rand.nextInt((9999999 - 1000000) + 1) + 1000000; 
      } 
      INLIST.add(RANDOMNUM); 
     } 
     return INLIST; 
+0

選択を解除しないので、無限ループです。常に選択されてループ – Li357

+1

'Random_gen_Button.isSelected()'の上にドラッグされます。このコードは常に 'true'を反映します。したがって、ループは決して終了しません。これは無限ループの原因となる可能性があります。 ありがとうございます。 –

+0

'generate_int()'メソッド定義を投稿して、このメソッドに実装しようとしているものを明確にしてください。 –

答えて

2

定期的に自分自身を更新するために、あなたのコンポーネントを伝え他のスレッドためjava.swing.Timerを使用してください。以下の例では、ボタンが選択されたとき、またはボタンのモデルがボタンを押したときにタイマーのリスナーがボタンのテキストを更新します。余談として

image

import java.awt.EventQueue; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.Random; 
import javax.swing.JFrame; 
import javax.swing.JToggleButton; 
import javax.swing.Timer; 

/** 
* @see http://stackoverflow.com/a/38051563/230513 
*/ 
public class Test { 

    private final Random r = new Random(); 

    private void display() { 
     JFrame f = new JFrame("Test"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JToggleButton button = new JToggleButton("0000"); 
     f.add(button); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
     Timer t = new Timer(100, new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       if (button.isSelected() | button.getModel().isPressed()) { 
        button.setText(String.valueOf(r.nextInt(9000) + 1000)); 
       } 
      } 
     }); 
     t.start(); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Test()::display); 
    } 
} 

、GUIエディタは、あなたのデザインを決定することはできません。

関連する問題