2014-04-07 5 views
0
class ballbouncepanel extends JPanel 
{ 
     public void start() 
      { 

       Timer timer; 
       final int FREQ = 45; 
       timer = new Timer(FREQ, new ActionListener() 
       { 
        public void actionPerformed(ActionEvent evt) 
        { 
         repaint(); 
        } 
       }); 
       timer.start(); 
    } 

    Rect rect = new Rect(); 
     public Dimension getPreferredSize() 
     { 
      return new Dimension(250,200); 
     } 
     public void paintComponent(Graphics g) 
     { 
      super.paintComponent(g); 
      rect.draw(g); 
      rect.move(g); 
      rect.erase(g); 
     } 
} 

class Rect 
{ 
    public int xLocation = 0; 
    public int yLocation = 0; 
    public int xVelocity = 10; 
    public int yVelocity = 10; 

    public void draw(Graphics g) 
    { 
     g.setColor(Color.cyan); 
     g.fillRect(xLocation, yLocation, 20, 20); 
    } 
    public void move(Graphics g) 
    { 
     xLocation += xVelocity; 
     yLocation += yVelocity; 
    } 
    public void erase(Graphics g) 
    { 
     g.setColor(Color.white); 
     g.fillRect(xLocation, yLocation, 20, 20); 
    } 
} 

새로운 오류는 이제 내 repaint 메서드가 작동하지 않는다는 것입니다.Swing repaint()가 작동하지 않음

위 그림은 애플릿 또는 JApplet을 사용하는 페인트를 이해하지만, 스윙의 애플릿에서 수행 한 작업을 시도하고 있습니다. 문제는, 그래픽을 구현하는 방법에 대한 많은 자습서를 찾았지만, 대부분이 메인 그래픽을 실행하고 있으며,이 특정 프레임 (BB)에 있어야합니다. 누군가 나를 이해할 수 있도록 도와 주거나 초보자 지도서를 가르쳐 주시면 감사하겠습니다.

+0

아래의 예를 볼 수있다 (http://docs.oracle.com/javase/tutorial/uiswing/painting/index.html). – camickr

+0

_ 애플릿이나 JApplet을 사용하는 페인트는 이해하지만 스윙의 애플릿에서했던 작업을하려고합니다. _ 같은 개념입니다. fyi'JApplet'은 스윙 구성 요소입니다. _ "지금은 문제가 생겼습니다"_ - 무슨 문제가 있습니까? 몇 가지 코드를 보여주십시오. 게시 한 코드에는 그림이 표시되지 않습니다. –

+0

나는 그것을 편집했다. 새로운 문제는 다시 그리지 않는 것입니다. 죄송합니다 코드가 없습니다 –

답변

1

나는 ballbouncepanelstart() 메서드를 호출하는 것을 잊고있는 것 같습니다. 또한 참고 : move() 방법은 어떤 그림을하지 않습니다있어, 그래서 Graphics 인수를 꺼내 바로 erase 방법은 어떻게해야되는 것 또한

확실하지 타이머에 전화,하지만 난 당신이 원하는 생각하고 있어요 타이머의 틱마다 색상을 변경하십시오. 이 경우 color 변수 만 유지하고 해당 변수를 변경하십시오. 당신은 [사용자 정의 그림]의 스윙 자습서를 참조하십시오

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 
import javax.swing.Timer; 

public class bounceballpanel extends JPanel { 
    public void start() { 

     Timer timer; 
     final int FREQ = 45; 
     timer = new Timer(FREQ, new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
       rect.move(); 
       rect.changeColor(); 
       repaint(); 
      } 
     }); 
     timer.start(); 
    } 

    Rect rect = new Rect(); 

    public Dimension getPreferredSize() { 
     return new Dimension(250, 200); 
    } 

    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     rect.draw(g); 
     //rect.erase(g); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable(){ 
      public void run() { 
       JFrame frame = new JFrame(); 
       bounceballpanel panel = new bounceballpanel(); 
       panel.start(); 
       frame.add(panel); 
       frame.pack(); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 
} 

class Rect { 
    public int xLocation = 0; 
    public int yLocation = 0; 
    public int xVelocity = 10; 
    public int yVelocity = 10; 

    Color color = Color.cyan; 

    public void draw(Graphics g) { 
     g.setColor(color); 
     g.fillRect(xLocation, yLocation, 20, 20); 
    } 

    public void move() { 
     xLocation += xVelocity; 
     yLocation += yVelocity; 
    } 

    public void changeColor() { 
     if (color == Color.cyan) { 
      color = Color.white; 
     } else { 
      color = Color.cyan; 
     } 
    } 

    /* 
    public void erase(Graphics g) { 
     g.setColor(Color.white); 
     g.fillRect(xLocation, yLocation, 20, 20); 
    }*/ 
} 
+0

매력처럼 일한하지만 지금 xvelocity에 int를 추가하는 버튼을 만들고 있지만 그것으로 인해 정적 컨텍스트를 참조하려고하는 저 때문에 작동하지 않습니다. 그러나 새 Rect를 추가하면 아무것도하지 않음 –

+0

버튼이 bounceballpanel의 클래스 멤버 인 경우'main'에서 사용할 수 없습니다.'main' 외부의'static '이 아닌 것은 main에서 액세스 할 수 없습니다. 당신은 패널에 단추를 추가 할 수 있습니다. –

+0

버튼이 있는데, addx() 메서드를 호출하는 액션 리스너는 무엇을 넣을까요? –

관련 문제