JButtonからコンソールに入力を渡す

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を試みた)と私はちょうどそれを得るように見えることはできません。

*私は基本的に、元のコンソールアプリケーションを変更せずに、自分のコンソールアプリケーションを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");
             }
          }); 

それは私が書いてみたものですが、うまくいかないようです。

ベストアンサー

について

私は基本的に、元のコンソールアプリケーションを変更せずにコンソールアプリケーションをGUIアプリケーションにするつもりです…

私のアドバイスは簡単です:「やめないで」。

2つのアプリケーションは完全に異なる構造を持ち、1つは線形であり、もう1つはイベント駆動型であり、お互いに直接変換できません。最初から新しいGUIプログラムを作る方がいいです。
GUI以外のアプリケーションに、構造化されたオブジェクト指向のクラスがいくつか含まれている場合は、GUIの「モデル」またはロジックセクションでこれらのクラスを使用しますが、1つのタイプのプログラムフローを直接変換しようとはしません他のアプリケーションに適用されます。

Edit
Based on your posted requirements:

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

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

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です