2016-09-28 2 views
-1

이것은 처음으로 스윙 그래픽을 사용하므로 나와 함께 곰. 나의 현재 목표는 내가 사용하고있는 이미지의 방향을 바꾸기 위해 화살표 키 중 하나를 누를 때 텍스처가 변하는 것이다. 이 작업에서 페인트 메서드를 만들었고 화살표 키를 누를 때 repaint();을 사용하여 호출하려고합니다. 나는 또한 그것에 따라 그림을 바꿀 수 있도록 페인트 할 매개 변수가 있다고 생각하고있었습니다. 내 페인트 메서드를 호출하여 조치 할 수 있도록 repaint();를 호출 할 등 내 개인 정적 클래스 모든 KeyListener에서는repaint();를 올바르게 사용하는 방법; Java에서

//startGame.java 
//Version 1.0 
//09/06/2016 

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import java.io.*; 


public class Main extends JFrame 
{ 


public static void main(String[] args) 
{ 
    final JFrame frame = new JFrame("Display Mode"); 
    frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 
    frame.setUndecorated(true); 


    frame.pack(); 
    frame.setVisible(true); 

    frame.addKeyListener(new KeyInput()); 

} 
private static class KeyInput implements KeyListener 
{ 
    public void keyPressed(KeyEvent ke) 
    { 
     if(ke.getKeyCode() == KeyEvent.VK_ESCAPE) 
     { 
      System.exit(0); 
     } 
     if(ke.getKeyCode() == KeyEvent.VK_RIGHT) 
     { 
      //repaint(); 


     } 
     /*if(ke.getKeyCOde() == KeyEvent.VK_LEFT) 
     { 



     } */ 
    } 
    public void keyTyped(KeyEvent ke) 
    {} 
    public void keyReleased(KeyEvent ke) 
    {} 
} 

@Override 
public void paint(Graphics g) 
{ 
    super.paint(g); 
    ImageIcon player = new ImageIcon("RealPlayersV2.png"); 
    image = player.getImage(); 

    Graphics2D g2d = (Graphics2D) g; 
    g2d.drawImage(image, 187, 245, this); 


} 

} 

: 여기

는 내가 현재 가지고 코드입니다. 불행히도 repaint();은 mykeylistener 메서드와 같은 정적 메서드에서 호출 할 수 없습니다. keypress에 repaint();을 사용하는 우아한 해결책이 있습니까? 감사!

+0

그래서? 내부의'KeyInput' 클래스를 정적으로 만들지 마십시오. 다른 컨텍스트에서 재사용 할 수있는 것과는 다릅니다. 어쨌든 비공개입니다. –

+0

KeyInput은 정적 인 main 메소드에서 참조되므로 정적이어야합니다. – JackaJacka

답변

-1

메인 클래스는 JFrame이므로 하나만 사용하면 메인 메서드에서 사용한 것처럼 JFrame을 새로 만들지 않아야합니다.
그런 다음 프레임 초기화를 생성자로 이동해야 KeyListener을 정적으로 만들 수 없습니다. 그리고 정적이 아닌 경우 repaint 메서드를 호출 할 수 있습니다.

public class Main extends JFrame{ 
    public static void main(String[] args){ 
     new Main(); 
    } 
    public Main(){ 
     super("Display Mode"); 
     setExtendedState(JFrame.MAXIMIZED_BOTH); 
     setUndecorated(true); 
     pack(); 
     setVisible(true); 
     addKeyListener(new KeyInput()); 
    } 
    private class KeyInput implements KeyListener{ 
     [...] repaint(); [...] 
    } 
    @Override 
    public void paint(Graphics g){...} 
} 
+3

(1-) JFrame에서 paint()를 재정의하지 마십시오. 사용자 정의 페인팅은 JPanel의 paintComponent()를 오버라이드 한 다음 패널에 프레임을 추가하여 수행됩니다. – camickr

관련 문제