0

たとえば、私はカレンダーを持っています。日付番号「1」を含む JLabel をカレンダーのすべての月に再利用することはできますか? または、そのすべてで別の JLabel を作成する必要がありますか? 通年カレンダーを作成しましたが、コードには 7,000 行のコードがあります...

4

2 に答える 2

1

答えは: はい、GUI コンポーネントを再利用できますが、JLabel は一度に 1 つのコンテナー (最近追加されたコンテナー) にしか表示できないため、以前のコンポーネントは使用できなくなります。

しかし、なぜあなたはしたいのですか?JLabel が表示している場合は、ImageIcon を再利用します。それ以外の場合は、テキストを表示するだけです。あなたの質問は、プログラムの設計がずれている可能性があり、プログラムの構造を再考する必要があることを示唆しています。最も重要なのは、プログラムのモデルとそのビューを混同しないことです。


最近のコメント:'

ImageIcon を使用しなければ可能でしょうか? 純粋な JLabel テキストを使用するだけですか? 私はNetbeans GUIクリエーターところで使用しています。

繰り返しますが、なぜしたいのですか?テキストを保持するだけです。これをしないことをお勧めしますが、プログラムの設計が悪いのではないかと心配しています。本当に使いたいのは JTable かもしれません。

やあ!素早い返信ありがとう!私の JLabel の日付は JPanel (月のパネル) 内にあり、すべてのパネルは JFrame 内にあります。JButton をクリックすると、現在のパネルが非表示になり、次のパネルが表示されます。各パネル (12 か月のパネル) には多数の JLabels があります。ラグを避けるために、毎年別の JFrame を作成する必要がありますか?

ラグがあってはなりません。CardLayout を使用して JPanels を交換する必要があります。

おそらくやりたいことは、一般的な Month オブジェクトのクラスを作成してから、特定の月ごとにこのオブジェクトのインスタンスを作成することです。もう一度、再設計を考えます。また、生成されたコードを使用せずにコーディングすることを学びます。これにより、使用しているライブラリの理解が深まります。


その他の推奨事項を編集:

まず、非 GUI モデル クラス Month を作成します。

  • 月名の文字列フィールドを指定します
  • 今月の 1 日の曜日の曜日 (おそらく列挙型) を指定します。
  • 曜日の int フィールドを指定します。
  • DayEvent オブジェクトの ArrayList を指定して、誕生日、休日などのカレンダーに配置できるイベントと、そのためのセッター メソッドおよびゲッター メソッドを保持することができます。

次に、GUI 部分として、MonthView という月を表す GUI クラスを作成します。

  • NetBeans で生成されたコードではなく、手動で作成します
  • 上記の Month クラスのインスタンスであるモデルを保持して使用できるように、Month フィールドを指定します。
  • それに BorderLayout を与える
  • 月名を表示する JLabel というタイトルを付けて、この BorderLayout.NORTH を追加します。
  • GridLayout(0, 7) を使用する JPanel を指定します -- 7 つの列と可変数の行に対して。この BorderLayout.CENTER を追加します
  • この GridLayout に JLabels を設定します。
  • 日付文字列を正しい JLabel グリッド セルに配置するロジックを用意します。

これで、日付は最大 35 個の JLabel を持つコードで表されます。確かに作成された日付に対して 365 個の JLabelsが作成されますが、すべての JLabel を作成できるようにするには、35 個 (7 * 5) 個の JLabels のコードが必要になるだけです。

于 2013-09-30T15:00:01.357 に答える
0

以前の JLabel と同時に描画する場合は、新しい JLabel を作成する必要があります。

高品質の回答を得るには、問題を示す明確で単純な自己完結型のコード例を提供する必要があります。

于 2013-09-30T14:58:05.867 に答える