コード public class MyPanel extends JPanel{ Player player1; int gun_x = -100; int gun_y = -100; /** * MyPanelのコンストラクタ */ public MyPanel(){ setBackground(Color.BLACK); //背景色設定 try{ player1 = new Player("jiki.gif", 0, 0, 32, 32); } catch(IOException ioe){ System.out.println("画像がありません"); } } /** * キー入力処理 */ protected void processKeyEvent(KeyEvent ke){ /*何かキーが押された場合*/ if(ke.getID() == KeyEvent.KEY_PRESSED){ System.out.println("キー" + ke.getKeyCode() + "が押された"); player1.move1(ke.getKeyCode()); move2(ke.getKeyCode()); repaint(); } } /** * 描画メソッド */ protected void paintComponent(Graphics g){ super.paintComponent(g); requestFocusInWindow(); //キー入力有効化 player1.draw1(g); draw2(g); } /** * */ public void draw2(Graphics g){ g.setColor(Color.WHITE); g.fillRect(gun_x, gun_y, 5, 5); } /** * */ public void move2(int keyCode){ if(keyCode == KeyEvent.VK_ENTER){ gun_x = player1.m_x; gun_y = player1.m_y; Thread thread = new Thread(new Runnable(){ public void run(){ for(int i = 0; i < 50; i++){ try{ Thread.sleep(50); } catch(InterruptedException e){ } gun_y -= 10; repaint(); } } }); thread.start(); } } }
これはプログラムの一部です。
今このプログラムでは、ENTERキーを押すと、0.05秒ごとにy座標が10ずつ動く四角形を描画しています。
このmove2メソッドを下のように別クラスに移したいのですが、
コード public class Gun{ int gun_x = -100; int gun_y = -100; /** * */ public void move2(int keyCode){ if(keyCode == KeyEvent.VK_ENTER){ gun_x = player1.m_x; gun_y = player1.m_y; Thread thread = new Thread(new Runnable(){ public void run(){ for(int i = 0; i < 50; i++){ try{ Thread.sleep(50); } catch(InterruptedException e){ } gun_y -= 10; repaint(); } } }); thread.start(); } } }
このときrepaint();でエラーが出てしまいます。
MyPanelクラスにあったときと違ってGunクラスはJPanelを継承していないからだと思うのですがよくわかりませんでした。
repaintはどう対処したらいいのでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/27 04:53
2016/06/27 04:59 編集
2016/06/27 07:40