2
statsButton.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e){ 

       //Return the string "stats" to gameLoop() as cmd 
      } 
     }); 

public void gameLoop(){ 
     Scanner lineScanner = new Scanner(System.in); 
     cmd = ""; 

     System.out.print(getBoard().printBoard(false)); 

     while (!cmd.equals("quit")) { 
      System.out.print(">"); 
      Scanner wordScanner = new Scanner(lineScanner.nextLine()); 

     if (wordScanner.hasNext()) { 
      cmd = wordScanner.next(); 
      if (cmd.equals("board")) { 
       System.out.print(getBoard().printBoard(false)); 
       } else if (cmd.equals("ships")) { 
      System.out.print(getBoard().printBoard(true)); 
       } else if (cmd.equals("help")) { 
        printHelp();  
       } else if (cmd.equals("stats")) { 
        printStats(); 
       } else if (cmd.equals("fire")) { 
      if(fire(wordScanner)) { 
      printStats(); 
      cmd = "quit"; 
        } 
       } else if (cmd.equals("quit")) {  
       } else if (!cmd.equals("")) { 
        System.out.println(ILLEGAL_COMMAND); 
       } 
      } 

     } 
    } 

私がやっていることは、ユーザーがstatsButtonをクリックすると、gameLoopのString cmdが "stats"に変更されることです。 statsButtonとgameLoop()は2つの異なるクラスにあります。誰でも私にそれをする方法を教えてくれますか? (私はpipedreader/pipedwriterを試みた)と私はちょうどそれを得るように見えることはできません。JButtonからコンソールに入力を渡す

*私は基本的に、元のコンソールアプリケーションを変更せずに、自分のコンソールアプリケーションをGUIアプリケーションにしようとしています。

編集:私は、私が書いてみました何

Class textBased 
PipedInputStream in = new PipedInputStream() 

public void gameLoop(){ 
    try{ 
     in.connect(GUIclass.out); 

    Scanner lineScanner = new Scanner(in);` 

Class GUIclass 
    PipedOutputStream out = new PipedOutputStream(); 
    PrintWriter writer; 

    public GUIclass(){ 
    final PrintWriter writer = new PrintWriter(out); 
    statsButton.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e){ 

       writer.println("stats"); 
      } 
      }); 

を試みたが、動作していないよう何。

+0

crossposted http://www.daniweb.com/software-development/java/threads/393562 – mKorbel

答えて

3

コンソールアプリケーションがボタンActionListenerをインスタンス化し、UIに渡すようにします。アクションイベントが発生すると、リスナーはコンソールアプリケーションにイベントが発生したことを通知します。 ActionListenerのメソッドは、何をすべきかを指示します。

+0

私は実際にそれを手に入れていません。簡単な例で説明できますか?また、私はそれが私がしていない元のクラスを変更すると思う。 – rlhh

+0

「するべきではない」 - どうしてですか? – duffymo

+0

"あなたは、あなたの戦艦ゲームをあなたのGUIインターフェイスでプレイすることができるはずです。さらに、プロジェクト1のために書いたテキストベースのフロントエンドは、まだ「動く」べきであり、再生可能でなければなりません。 – rlhh

4

私は基本的に「私のアドバイスは簡単です

:」...元コンソールアプリケーションを変更せずにGUIアプリケーションに私のコンソールアプリケーションを作成しようとしている

に関してませません

2つのアプリケーションは完全に異なる構造を持ち、1つはリニアで、もう1つはイベント駆動であり、互いに直接翻訳できません。 y私たちの非GU​​Iアプリケーションには、構造化された振る舞いのオブジェクト指向のクラスがいくつか含まれています。そして、それらのクラスをGUIの「モデル」セクションまたはロジックセクションで使用しますが、もう片方に。

編集
あなたの投稿を要件に基づいて:

「あなたはあなたのGUIインタフェースを介して、あなたの戦艦ゲームをプレイすることができるはずです。また、あなたがプロジェクトのために書いたテキストベースのフロントエンド。 1はまだ "仕事"で遊べるはずです。 "

私が間違っていると私を修正しますが、ここにいくつかのクラスが含まれていることを賭けており、そのうちの1つだけが「テキストベースのフロントエンド」です。その場合は、上記のようにフロントエンド以外のクラスをGUIのモデルとして使用しますが、GUIに関連するテキストベースのフロントエンドを使用せず、GUIでエミュレートしないでください。

+0

私はそれをやっていないことを理解しています、私はまたそれをしないことに慣れています。しかし、この場合、私はそうする必要があるという仕様書に記載されています。 – rlhh

+0

@ user1043625:この仕様をそのまま表示できますか? –

+0

"あなたは、あなたの戦艦ゲームをあなたのGUIインターフェイスでプレイすることができるはずです。さらに、プロジェクト1用に書いたテキストベースのフロントエンドは、まだ「動作して」再生可能でなければなりません。 – rlhh

1

あなたはこのようなものがある場合:

class B { 
public void gameLoop(){ 
    .. 
} 
} 

class A{ 

    statsButton.addActionListener(new ActionListener() { 
      ... 
     }); 
} 

をあなたが最終的にAでBへの参照を宣言することができます。その場合、内部クラスActionListenerに表示されます。

+0

私はあなたが書いたものに似た何かを持っています。しかし、問題は、ボタンをクリックしたときにString cmdをどのように変更するのですか? b.gameLoop()。cmdはうまくいかず、とにかくそれをやるべきだとは思わない。 – rlhh

3

私はホバークラフトのコメント(返信に変更)に同意します。

しかし、このような問題については、私はあなたのgameLoop()のメソッドシグネチャを変更します。私は以下を使用します:

public void gameLoop(Reader reader) 

次に、必要に応じてさまざまな種類のリーダーをループに渡すことができます。あなたがリダイレクトできるメソッドのシグネチャを変更することなく、

gameLoop (new StringReader("some text")); 

編集:あなたのような何かができるGUIについて

gameloop(new InputStreamReader(System.in)); 

:あなたのような何かをするかもしれないコンソールの

System.inは、ActionListenerによって取得されたStringから取得します。

public class Test 
{ 
    public static void main(String args[]) throws Exception 
    { 
     String text = "some text"; 
     System.setIn(new ByteArrayInputStream(text.getBytes())); 
     // gameloop(); 
     Scanner lineScanner = new Scanner(System.in); 
     System.out.println(lineScanner.nextLine()); 
    } 
} 
+0

私は何を試してきたかを示すために上記のものを追加しましたが、私にとってはうまくいかないようです。私が間違っていることを確信していない。 – rlhh

+0

@ user1043625、私はあなたの委員会を理解していません。なぜ私はその作業コード以来の提案を試してみませんか?私はPipedStreamの使用を提案していないので、あなたのコードに何が間違っているのか分かりません。 – camickr

関連する問題