2012-06-15 5 views
1

안녕하세요, null 레이아웃과 setBounds() 메소드를 사용하여 Gui 프로그램을 만드는 중입니다. 프로그램에서 25 개의 문자열을 화면의 임의의 위치에 인쇄하고 싶습니다. 나는 for 루프로 이것을 할 수 있다는 것을 알고 있지만, 나는 이것을 아무 소용이 없도록 시도해왔다.자바 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

* "null 레이아웃과 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

루프에서'새로운 Random()'을 사용하면 일반적으로 '임의의'값이 동일하다는 것을 의미합니다. OP가'Math.random() '을 사용하면 그 문제가 해결되었습니다. 당신의 예제를 수정하려면 루프 밖에서'new Random() '을 움직이거나 더 좋게 클래스 속성으로 선언하고 한 번만 생성하십시오. –

+1

죄송합니다. 사실입니다. 코드를 변경해 주셔서 감사합니다. :) –

+0

위대한 편집! .. +1 –

관련 문제