2012-06-15 27 views
1

嗨即時製作Gui程序使用null佈局和setBounds()方法進行佈局。在程序中,我希望隨機位置在屏幕上打印25個字符串。我知道我可以用for循環做到這一點,但我一直在嘗試這個無濟於事。我如何在Java中使用圖像gui

public void paint(Graphics g){ 
    super.paint(g); 
    for(i=0;i<25;i++){ 
     g.drawString("string name",Math.random()*250,Math.random()*250); 
     g.setColor(Color.RED); 
    } 
} 

我一直在努力這樣做,它一直沒有工作,所以我的問題是有一些更好的方式來做到這一點還是我做出某種明顯錯誤。

+2

*「使用空佈局和setBounds()方法佈局」*不要這樣做,它是一個瘋狂的道路。 –

+1

*「一直沒有工作」*「不工作」對告訴我們發生了什麼問題沒有用。它在工作時期望看到什麼?你看到了什麼?有沒有錯誤或例外? –

回答

2

你不使用的Math.random()部分正確試試這個:

import java.awt.Color; 
import java.awt.Container; 
import java.awt.EventQueue; 
import java.awt.Graphics; 
import java.util.Random; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

/** 
* 
* @author David 
*/ 
public class JavaApplication142 extends JFrame { 

    private int width = 300, height = 300; 

    public JavaApplication142() { 
     createAndShowUI(); 
    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       JavaApplication142 jApp = new JavaApplication142(); 
      } 
     }); 
    } 

    private void createAndShowUI() { 
     setTitle("Painting"); 
     setSize(width, height); 
     setResizable(false); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLocationRelativeTo(null); 
     addComponentsToContentPane(getContentPane()); 
     setVisible(true); 
    } 

    private void addComponentsToContentPane(Container contentPane) { 
     Panel panel1 = new Panel(); 
     contentPane.add(panel1); 
    } 

    class Panel extends JPanel { 

     private Random rand; 

     public Panel() { 
      rand = new Random(); 
     } 

     @Override 
     public void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      for (int i = 0; i < 25; i++) { 
       g.drawString("string name", (int) rand.nextInt(width), (int) rand.nextInt(height)); 
       g.setColor(Color.RED); 
      } 
     } 
    } 
} 

這將有助於讓面板的區域內繪製的所有字符串,但具有不同長度的字符串可能會去屏幕上,只需添加一些額外的代碼來檢查字符串的長度,並適當地設置它的合作伙伴

+2

您在循環中使用'new Random()'意味着'隨機'值通常是相同的。 OP使用'Math.random()'解決了這個問題。爲了修正你的例子,把'new Random()'移到循環外部,或者更好地聲明它是一個類屬性並創建一次。 –

+1

哎呀抱歉,這是真的,更改代碼感謝:) –

+0

偉大的編輯! .. +1 –