2014-04-17 7 views
1
내 키가 현재 나는 거의

업데이트 JFrame의 그림

package com.raggaer.frame; 

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Graphics; 

import javax.swing.JPanel; 
import javax.swing.KeyStroke; 

public class Elements extends JPanel { 

    private static int y = 250; 

    public Elements() { 

     this.getInputMap().put(KeyStroke.getKeyStroke("UP"), "up"); 
     this.getActionMap().put("up", new Listener("up")); 
     this.getInputMap().put(KeyStroke.getKeyStroke("DOWN"), "down"); 
     this.getActionMap().put("down", new Listener("down")); 
    } 

    public void paintComponent(Graphics g) { 

     super.paintComponent(g); 

     g.drawRect(250, this.y, 10, 10); 
    } 

    public Dimension getPreferredSize() { 

     return new Dimension(500, 500); 
    } 

    public static void setY(int cord) { 

     y += cord; 
      // Cant access repaint() 
    } 
} 

것을 달성 그리고이

package com.raggaer.frame; 

import java.awt.Graphics; 
import java.awt.event.ActionEvent; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 

import javax.swing.AbstractAction; 

public class Listener extends AbstractAction { 

    private String code; 

    //final Elements game = new Elements(); 

    public Listener(String order) { 

     this.code = order; 
    } 

    public void actionPerformed(ActionEvent e) { 

     System.out.println(this.code); 

     Elements.setY(1); 
    } 
} 

은 현재 모든 것을 내가 그나마 것을 제외하고 작동 내 리스너 클래스를 눌렀을 때 내 사각형을 업데이트 할

직사각형의 y 위치를 업데이트하는 방법을 알고, 정적 변수를 사용하려고했지만 그다음 repaint() 메서드를 호출 할 수 없습니다.

답변

1

아니요. 정적 인 것을 사용하지 마십시오. 메소드 나 필드도 사용하지 마십시오. 이렇게하면 객체 지향 프로그래밍 규칙이 깨져서 코드를 업데이트하고 유지하기가 어려워지기 때문입니다. 예외는 물론 당신의 주된 방법 일 것이고, 정말로 그 반에 속하는 신중하게 선택된 분야와 방법 일 것입니다. 대신 Element 객체의 메서드를 호출해야하는 클래스에 상태를 변경할 객체 인 JPanel 또는 Element 객체의 올바른 참조를 제공합니다. 이는 생성자 매개 변수를 통해 유효한 참조를 전달하여 수행 할 수 있습니다.

public class Listener extends AbstractAction { 
    private Elements elements; 

    public Listener(Elements elements) { 
    this.elements = elements; 
    } 
+0

Worked. 그래서 나는 정적 인 것을 항상 피해야 만합니까? –

+1

@AlvaroCarvajalNakosmai : 권장 사항으로 변경을 참조하십시오. 적절하게 필요한 곳을 제외하고는 통계를 피해야합니다. 이러한 상황 중 하나가 아닙니다. –