2012-01-16 21 views
0

別のクラスからいくつかの変数にアクセスするにはどうすればよいですか?たとえば、私は2つのファイルがあります:クラスからクラスへの変数へのアクセス

Main.java

package keyboardgame; 

import java.applet.*; 
import java.awt.*; 
import java.awt.event.*; 

public class Main extends Applet implements KeyListener 
{ 

    private static final long serialVersionUID = 1L; 
    private static boolean keyboardRightPressed = false; 
    private static boolean keyboardLeftPressed = false; 
    private static boolean keyboardUpPressed = false; 
    private static boolean keyboardDownPressed = false; 

    int ballX = 20; 
    int ballY = 20; 
    int ballSpeed = 10; 

    public void init() 
    { 
     addKeyListener(this); 
    } 

    public void keyPressed(KeyEvent e) 
    { 
     int keyCode = e.getKeyCode(); 
     if(keyCode == KeyEvent.VK_RIGHT) 
     { 
      keyboardRightPressed = true; 
      ballX = ballX + ballSpeed; 
      repaint(); 
     } 

     if(keyCode == KeyEvent.VK_LEFT) 
     { 
      keyboardLeftPressed = true; 
      ballX = ballX - ballSpeed; 
      repaint(); 
     } 

     if(keyCode == KeyEvent.VK_UP) 
     { 
      keyboardUpPressed = true; 
      ballY = ballY - ballSpeed; 
      repaint(); 
     } 

     if(keyCode == KeyEvent.VK_DOWN) 
     { 
      keyboardDownPressed = true; 
      ballY = ballY + ballSpeed; 
      repaint(); 
     } 
    } 

    public void keyReleased(KeyEvent e) 
    { 
     int keyCode = e.getKeyCode(); 
     if(keyCode == KeyEvent.VK_RIGHT) 
     { 
      keyboardRightPressed = false; 
      repaint(); 
     } 

     if(keyCode == KeyEvent.VK_LEFT) 
     { 
      keyboardLeftPressed = false; 
      repaint(); 
     } 

     if(keyCode == KeyEvent.VK_UP) 
     { 
      keyboardUpPressed = false; 
      repaint(); 
     } 

     if(keyCode == KeyEvent.VK_DOWN) 
     { 
      keyboardDownPressed = false; 
      repaint(); 
     } 
    } 

    public void keyTyped(KeyEvent e) { 
    } 


    public void paint(Graphics g) 
    { 
     g.fillOval(ballX,ballY,20,20); 
     g.drawString("Right :"+keyboardRightPressed,0,10); 
     g.drawString("Left :"+keyboardLeftPressed,0,20); 
     g.drawString("Up :"+keyboardUpPressed,0,30); 
     g.drawString("Down :"+keyboardDownPressed,0,40);   
    } 

} 

KeyThread.java

package keyboardgame; 

public class KeyThread implements Runnable 
{ 

    public KeyThread(String s,int speed) 
    { 
     name = s; 
     time = speed; 
    } 

    public void run() 
    { 
     try 
     { 
      if(keyboardRightPressed == true) 
      { 
       ballX = ballX + 10; 
       ballY = ballY + 10; 
      } 
     } 
     catch(Exception e) 
     { 

     } 
    } 
} 

を私は何をしたいですからKeyThread.javaがするということですMain.java特に

からの値の変更/増分/アクセスが可能
int ballX = 20; 
int ballY = 20; 

ので、私はそれを行うことができますどのように

Thread t5 = new Thread(new KeyThread("Moving Right", ballX = ballX + 1, 20)); 
t5.start(); 

ようMain.javaから私のスレッドを呼び出すことができますか? それはなぜそう難しいですか?

+0

あなたはいくつかのコメントであなたが言ったように、あなたはJAVAを初めて使い慣れているので、javax.swingパッケージのアプレットの代わりにJAppletを試してみてください。これは、java.awtパッケージのAppletと比較してはるかに優れています。よろしくお願いします。 –

答えて

1

privateの代わりに変数publicを宣言した場合は、それらを(たとえば)Main.ballXとして参照できますが、これは一般的には悪い習慣です。別々の物を分かち合うために物をクラスに整理します。クラスBの中でクラスAのメンバーを使い始めると、クラスBはAに依存しているので、後でデバッグして維持することが難しくなります。メインクラス( "getBallX()"と "setBallX(int x)")内に "getter"や "accessor"メソッドを用意することで、所有クラス(この場合Main)がプライベートメンバーをより良くコントロールできるようになります。

+0

私はメインを書いています。と "ballX"は(Eclipseを使用して)表示されないので、何か間違っている必要があります...私の問題では、推奨されるアプローチは何ですか?私は透明な水のようにそれをかなり理解していませんでした – Master345

2

オブジェクトの非静的メソッドを呼び出すには、そのクラスのインスタンスが必要です。詳細については、Objectsを参照してください。

+0

私はこれを理解するのに苦労しています...しかし、私はしなければなりません。私はプログラミング魔女のPHP/HTMLタイプから来ています。それは簡単ですし、私はJavaに適合しようとしています。うまくいけば私はそれを作る:)) – Master345

+0

@RowMinds、ああ... OOP初心者。さて、[こちら](http://docs.oracle.com/javase/tutorial/java/concepts/index.html)を開始することをお勧めします。 G'luck! – mre

+0

ちょっと、それほど悪くはない、実際にキーボードからフルスクリーンでボールを移動させた:)私はちょっとしたコンセプトを理解していない、ごめんなさい... – Master345

1

また、頻繁なタスクが値に加算/減算される場合、adjustBallX(int x)のようなメソッドが役に立つかもしれませんので、毎回get()とset()を呼び出さずに値を減らしてください。

関連する問題