2016-10-01 3 views
-2

11個のボタン(すべてが配列)でJPanelを作成しました。次に、これらのボタンにactionListenersを設定しますが、最初に有効にするボタンは1つだけです。その上にあるactionListenerが完了した後、次のボタンが有効になります。ここに私のコードです!JPanel内の1つのボタンを除くすべてのボタンを無効にして、それを次々に有効にする方法

public class Beginner extends JPanel { 

    static JButton quest; 
    Random rand = new Random(); 

    int n = 10; 

    static List <Point> points = new ArrayList<Point>(); 

    Quest1 q1; 
    Quest2 q2; 
    Quest3 q3; 
    Quest4 q4; 
    Quest5 q5; 
    Quest6 q6; 
    Quest7 q7; 
    Quest8 q8; 
    Quest9 q9; 
    Quest10 q10; 
    Quest11 q11; 

    public Beginner() { 

     int radius = 200; 
     Point center = new Point (250, 250); 

     double angle = Math.toRadians(360/n);  
     points.add(center); 
     for (int i = 0; i < n; i++) { 
      double theta = i * angle; 

      int dx = (int) (radius * Math.sin(theta));  
      int dy = (int) (radius * Math.cos(theta)); 
      Point p = new Point (center.x + dx , center.y + dy); 
      points.add(p); 
     } 
     draw (points); 
    } 

    public void draw (List<Point> points) { 
     JPanel panels = new JPanel(); 
     SpringLayout spring = new SpringLayout(); 
     int count = 1; 
     for (Point point: points) { 
      quest = new JButton("Question " + count); 
      quest.setForeground(Color.BLACK); 
      Font fonte = new Font("Script MT Bold", Font.PLAIN, 20); 
      quest.setFont(fonte); 
      add (quest); 
      count++; 
      spring.putConstraint(SpringLayout.WEST, quest, point.x, SpringLayout.WEST, panels); 

      spring.putConstraint(SpringLayout.NORTH, quest, point.y, SpringLayout.NORTH, panels); 
      setLayout(spring); 
      panels.setOpaque(false); 
      panels.setVisible(true); 
      panels.setLocation(5,5); 
      add(panels); 
      //I want to disable all but one button at this point 

      quest.addActionListener (new ActionListener() { 
       public void actionPerformed (ActionEvent p) { 
        if (point.equals(points.get(0))) { 
         q1 = new Quest1(); 
         //then, enable the next after this is completed 
        } 
        else if (point.equals(points.get(1))) { 
         q2 = new Quest2(); 
         //same comment in Quest1 follows....and so on! 
        } 
        else if (point.equals(points.get(2))) { 
         q3 = new Quest3(); 
        } 
        else if (point.equals(points.get(3))) { 
         q4 = new Quest4(); 
        } 
        else if (point.equals(points.get(4))) { 
         q5 = new Quest5(); 
        } 
        else if (point.equals(points.get(5))) { 
         q6 = new Quest6(); 
        } 
        else if (point.equals(points.get(6))) { 
         q7 = new Quest7(); 
        } 
        else if (point.equals(points.get(7))) { 
         q8 = new Quest8(); 
        } 
        else if (point.equals(points.get(8))) { 
         q9 = new Quest9() ; 
        } 
        else if (point.equals(points.get(9))) { 
         q10 = new Quest10() ; 
        } 
        else if (point.equals(points.get(10))) { 
         q11 = new Quest11(); 
        } 
       } 
      }); 
     } 
    } 
} 
+1

上記のコードは問題とは関係がありません。お手伝いをさせてください。私はあなたが最初から始めることをお勧めします - ボタンの数を保持するGUIを含む非常に単純なプログラムを作成し、あなたの主な問題を解決しようとするところで[mcve]を作成して投稿し、このコードを持っています。できるだけ具体的で説明的なものにしてください。 –

+1

上記のコードを再実行することを検討する必要があります。なぜなら、まったく同じことをしているように見えるコード行がたくさんある場合や、もっと幸せそうに見えるクエストオブジェクトがたくさんある場合には、 ArrayListまたは配列で一緒に保持されます。 –

+0

また、ActionListenersはほとんど瞬時に実行する必要があります。ボタンを順番に有効にしたい場合を除いて、あなたの要求は詳細には分かりません。どうか明らかにしてください。 –

答えて

2

あなたは、私はボタンがアクティブなプログラムを伝えるために、少なくとも二つのフィールド、あなたのボタンで満たされArrayList<JButton>、およびint buttonListIndex int型のインデックスフィールドを使用するenablebuttonsを順次たい場合。ボタンを有効または無効にするには、setEnabled(true)を使用します。 ActionListenerでインデックスintをインクリメントし、forループを使用してすべてのボタンをループし、インデックスに対応するもの以外のすべてを無効にします。私はあなたのためにコードの実装を残しておきます。

+0

これが文法であれば...私はそれをよりよく愛していただろう!私のボタンはすでにアーリーリストの一員です。 –

+1

@ Presh_K7:コーディングの機会を自分自身を欺いてはいけません。これを最初にやってみてください。あなたの元の質問でも、私はまだどんな試みも見ていません。あなたが試しに立ち往生した場合は、あなたの質問に編集として投稿してください。私はあなたと一緒に仕事をします。 –

+0

どのボタンをアクティブにしているのかをプログラムに伝えるために、int buttonListIndexをどのように作成すればいいですか?私は混乱しています! –

関連する問題