1

現在、Java アプリケーション (これも私が作成) をコンソール ベースのものから Swing ベースの GUI を使用するものに変換しようとしています。まったく問題ありませんが、私は Swing を十分に理解していないため、これはやや困難です。

私の現在の問題は、文字の配列を出力に出力することです。もともと、for ループと System.out.print(theworld[j][i]); を適切に使用することで、コンソールに直接出力できました。(ここで、i と j はループを反復し、theworld は問題の配列です)、しかし、Swing GUI で動作するように似たものを取得する方法がわかりません。

具体的には、次のようにコンソールに出力されました。

for (int i = 0; i < ydimension; i++){
  for (int j = 0; j < xdimension; j++){
    System.out.print(theworld [j][i]);
  }
System.out.println();
}

現在、JMenuBar が添付された JFrame があり、すべて意図したとおりに動作します。私が望むのは、ボタンの押下またはタイマーの目盛りのいずれかの刺激に応答して、配列がフレーム (または取り付けられたパネル) に印刷されて表示されることです。

もう1つのことは、配列はティックごとに更新され、これは最終的に印刷された配列に反映される必要があるため、配列または同様のものを印刷する前に画面をクリアすることですか?

ありがとう。

編集:コードをもう一度見ただけで、質問で、外側の for ループで println を省略したことに気付きました。すべてを1行ではなく、1行ずつ印刷することになっています。上記のコードは、これを反映するように修正されています。

4

3 に答える 3

2

JTableおそらく、テキストを直接出力しようとする代わりに a を使用した方が、より理にかなっています (そして読みやすくなります) 。これがどのように見えるかの例です。ティックごとに を更新しTableModel、画面のクリアについて心配する必要はありません。

非常に重要なもう 1 つのことは、 を更新するときは、 Swing のスレッド ポリシーTableModelに従って実行する必要があるということです。つまり、更新を行っているスレッドから、おそらく次のようなことをしなければならないでしょう:

SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        // Update row/rows of table model here
    }
});
于 2013-01-05T16:11:55.777 に答える
1

テキストを GUI に表示したいだけの場合は、最初に表示する文字列を作成する必要があります。したがって、以前にコンソールに出力していた文字列を 1 つの文字列に連結します。

次に、JTextArea を使用して表示できます。JLabel を使用したり、JPanel に直接描画したりすることもできます。

表示を更新するには、TextArea に新しいテキストを再度設定します。

于 2013-01-05T16:03:31.100 に答える
1

テキスト データを表示するにはさまざまな方法があり、それぞれにさまざまな状況での長所と短所があります。

1) テキスト コントロール:

単にテキスト フィールドとも呼ばれるテキスト コントロールは、編集可能なテキストを 1 行だけ表示できます。ボタンと同様に、アクション イベントを生成します。それらを使用して、ユーザーから少量のテキスト情報を取得し、テキスト入力が完了した後にアクションを実行します。

2) プレーン テキスト エディター:

JTextArea は、複数行の編集可能なテキストを表示できます。テキスト領域には任意のフォントでテキストを表示できますが、テキストはすべて同じフォントです。テキスト領域を使用して、ユーザーが任意の長さのフォーマットされていないテキストを入力できるようにしたり、フォーマットされていないヘルプ情報を表示したりできるようにします。

3) スタイル付きテキストエリア:

スタイル付きテキスト コンポーネントは、複数のフォントを使用して編集可能なテキストを表示できます。一部のスタイル付きテキスト コンポーネントでは、画像の埋め込みやコンポーネントの埋め込みが可能です。スタイル付きテキスト コンポーネントは、ハイエンドのニーズに適した強力で多面的なコンポーネントであり、他のテキスト コンポーネントよりも多くのカスタマイズ手段を提供します。

3)JLabel

JLabel クラスを使用すると、選択できないテキストと画像を表示できます。文字列、画像、またはその両方を表示するコンポーネントを作成する必要がある場合は、JLabel を使用または拡張して作成できます。コンポーネントがインタラクティブで、特定の状態がある場合は、ラベルの代わりにボタンを使用します。

4)JTable (@AndrewThompsons コメントに +1)

JTable クラスを使用すると、データのテーブルを表示でき、オプションでユーザーがデータを編集できるようになります。JTable にはデータが含まれていないか、データがキャッシュされていません。これは単にデータのビューです。

上記のすべては、オラクルからの関連する例/情報にリンクされています。

次の問題は、コンポーネントを必要な場所に配置することです。

この Swing にはさまざまな組み込みLayoutManagerの があります。

詳細については、コンテナ内のコンポーネントのレイアウトを参照してください。

はどうかと言うと:

もう1つのことは、配列はティックごとに更新され、これは最終的に印刷された配列に反映される必要があるため、配列または同様のものを印刷する前に画面をクリアすることです.

Swing Timerを使用して、Gui がEDTから更新されていることを確認します。

上記のコンポーネントのほとんどにJTableは、シンプルなsetText(String s)andgetText()メソッドがあります。

それらのインスタンスの 1 つを呼び出すsetTextと、古いテキストが新しいテキストで上書きされます。したがって、それをクリアする必要はありません。テキストを新しいテキストで追加した同じメソッドを呼び出すだけです。テキストを追加するには、 を使用するときにgetText()setText(String s)またはを組み合わせて使用​​します。append(String s)JTextArea

これがあなたの望むものではない場合は、期待される出力をより具体的にしてみてください。おそらく、あなたが持っているものと達成しようとしていることを示すSSCCEを投稿してください。

于 2013-01-05T17:24:19.993 に答える