2016-10-03 8 views
0

intからstringに変換するのと同じように、JavaのポイントからJButtonに変換することはできますか。助けてもらえると助かります。ありがとう!ポイントをボタンに変換する

import java.util.ArrayList; 
    import java.util.List; 
    import java.util.Random; 

    import javax.swing.*; 

    import java.awt.*; 


    @SuppressWarnings("serial") 
    public class Beginner extends JPanel { 

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

     int n = 10; 

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


     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); 


          quest.addActionListener(new ActionListener(){ 
         public void actionPerformed(ActionEvent p) { 

          JButton source = (JButton) p.getSource(); 
          //where the problem lies 
          if (source.equals(points.get(0))) { 

           //some action.... 

          } 

         } 
        }); 

         } 
         } 
      public static void main(String [] args){ 
       JFrame frame = new JFrame(); 
       //set JFrame properties 
       JButton start = new JButton ("CLick here to start"); 

      start.addActionListener(new ActionListener(){ 
        public void actionPerformed (ActionEvent et) { 
        Beginner novice = new Beginner(); 
        //set Beginner properties (remember it extends JPanel); 
      } 
       }); 

       } } 
+2

あなたは何を正確に達成しようとしていますか? –

+0

私は11のボタンを作成するためにポイントのarraylistを持つ1つのJButtonを使用しましたが、ポイントとして認識され、JButtonに変換して使いやすくしたいのです! –

+0

いくつかのコードを気にしていたら....私に教えてください? –

答えて

1

このようにコードに不足している行を追加する必要があります。これをテストしただけで動作します。

  • パッケージからPointクラスをインポートします。
  • mainメソッドを使用して、クラスの新しいインスタンスを作成してコードを実行します。
  • また、setLayoutaddメソッドを呼び出すことができるように、JFrameクラスを拡張する必要があります。

    package javaapplication6; 
    
    import java.awt.Color; 
    import java.awt.Font; 
    import java.awt.Point; 
    import java.awt.event.ActionEvent; 
    import java.awt.event.ActionListener; 
    import java.util.ArrayList; 
    import java.util.List; 
    import java.util.Random; 
    import javax.swing.JButton; 
    import javax.swing.JPanel; 
    import javax.swing.SpringLayout; 
    import javax.swing.JFrame; 
    
    public class Beginner extends JFrame { 
    
        Random rand = new Random(); 
    
        int n = 10; 
    
        static List<Point> points = new ArrayList<Point>(); 
    
        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) { 
    
          JButton quest = new JButton("Question " + count); 
    
          quest.setForeground(Color.BLACK); 
          Font fonte = new Font("Script MT Bold", Font.PLAIN, 20); 
          quest.setFont(fonte); 
          quest.addActionListener(new ActionListener() { 
           @Override 
           public void actionPerformed(ActionEvent et) { 
            System.out.println(quest.getText()); 
            //do something else 
           } 
    
          }); 
          add(quest); 
    
          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); 
    
          count++; 
         } 
         setSize(700, 700); 
         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
         setVisible(true); 
        } 
    
        public static void main(String[] args) { 
         new Beginner(); 
        } 
    } 
    
+0

私の編集した質問にほとんど何をしたのですか? –

+0

それぞれにアクションリスナーを設定して、自分が持っているものを確認してください! –

+0

作成されたボタンにactionListenerを設定する場合、if(point.equals(points.get(int))){// some action}のようなものが得られます。私は欲しくない。私は、作成したJButtonオブジェクトでポイントを置き換えたいと思います。なぜアプリケーションを実行するのですか? –

関連する問題