2016-10-03 52 views
0

是否有可能從點轉換到JButton在Java中,就像你從int轉換爲string ..任何幫助是可以接受的,請我需要幫助。謝謝!轉換點到按鈕

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

我使用了一個帶有點陣列的JButton來創建11個按鈕,但它們只被識別爲點,並且我想將它們轉換爲JButton以便於使用! –

+0

如果你關心一些代碼....讓我提供? –

回答

1

Probbaly您需要將缺少的行添加到您的代碼,就這樣,我只是測試它和它的作品。

  • awt包中導入Point類。
  • 使用main方法通過創建類的新實例來執行您的代碼。
  • 此外,您還需要擴展JFrame類以便能夠調用setLayoutadd方法。

    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

嘗試在他們每個人身上設置一個actionlistener,看看你有什麼! –

+0

當你想在創建的按鈕上設置一個actionListener時,你會得到類似if(point.equals(points.get(int))){//一些動作}。我不想要的。我很樂意用創建的JButton對象替換這個點。 –