JComponentを2つの異なるコンテナに追加することはできませんが、これを模倣する方法が必要です。私はオーバーライドされた描画メソッドを持つJLabelを持っています。このラベルを2つのJFramesに同時に表示します。両方に追加することはできないので、1つのJLabelを再描画して別のものに見えるようにするにはどうすればいいですか?もう1つのJFrameはそれを反映しますか?JComponentを別のミラーにする方法はありますか?
答えて
これが私の問題だったら、私はそのJComponentを作成するためのクラスを作成しました(私はJPanelを使いたいと思っています)。これにはMVCまたは "Model-View-Controller"タイプのプログラム構造を使用しますプログラム。このモデルは、表示されるグラフィカルオブジェクトの論理表現を含むプログラムのロジックの状態を保持し、ビューはJPanelを拡張したクラスであり、必要に応じて保持されるデータを表示しますモデル。私はこれらの生き物のうちの2つを作り、それらを持っています同じモデルを共有する - これは鍵です。次に、変更が1つに発生すると、その両方に表示されます。
コードに関する詳しい説明とより詳しい説明が必要な場合は、有効なminimal example programを作成して転記することを検討してください。
あなたは、モデル - ビューパターン使用する必要があります:あなたのモデルは、単一の文字列を持つクラスだろう
https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93viewmodel
を。あなたのビュー、つまりモデルが変更されたときにJLabelに通知する必要があります。あなたがいることをオブザーバーパターンを使用して行うことができます。これは、
https://en.wikipedia.org/wiki/Observer_pattern
、あなたのモデルは、オブザーバーのリストを保持し、あなたがモデルを更新するたびに、すべてのオブザーバが通知を得ます。例:
class Model {
public interface Observer {
void onTextChanged();
}
private String text;
final private List<Observer> observerList = new ArrayList<>();
public void addObserver(Observer observer) {
observerList.add(observer);
}
public void setText(String text) {
this.text = text;
for (Observer observer : observerList)
observer.onTextChanged();
}
public String getText() {
return text;
}
}
このようにして、必要な数のビュー/ JLabelsでモデルを表示できます。たとえば、次のようになります。
final JLabel label = new JLabel();
model.addObserver(new Model.Observer() {
public void onTextChanged() {
label.setText(model.getText());
}
});
final JLabel label2 = new JLabel();
model.addObserver(new Model.Observer() {
public void onTextChanged() {
label2.setText(model.getText());
}
});
ディーセント・アンサー1+ –
- 1. モーダルJFrameまたは別のJComponentを作成するには?
- 2. 別のiframeにアクセスする方法はありますか?
- 3. 別のドロップダウンをドロップダウンする方法はありますか?
- 4. JavaScriptのブラウザタブを識別する方法はありますか?
- 5. プッシュデバイストークンを取得する別の方法はありますか?
- 6. 遠隔地にあるGerritミラーをセットアップする方法
- 7. JComponentにローカルファイルを使用する場合、ファイルパスをハードコードしない方法がありますか?
- 8. W3C Throttles DTD/XSDリクエスト。ミラーやファイルリストはありますか?
- 9. 別のプロセスメモリに書き込む方法はありますか?
- 10. mysqlで1つの列のミラーを別のものにする方法
- 11. 別々の実動ミラーであるテスト開発DBをセットアップしますか?
- 12. プロジェクトの一部を別のプロジェクトにコピーする方法はありますか?
- 13. 春の別のURLにURLをマップする方法はありますか?
- 14. Railsのエラーを別のログファイルに記録する方法はありますか?
- 15. マップの逆を別のマップにコピーする方法はありますか?
- 16. 別のJPanelの上に正確なJPanelミラーを作成する方法
- 17. C:ファイルをコンパイルする別の(より良い)方法はありますか?
- 18. JComponentの使用方法
- 19. 注釈を別のファイルに保存する方法はありますか?
- 20. ジャイロスコープのデータを個別に統合する方法はありますか?
- 21. 変数を別のファイルに保存する方法はありますか?
- 22. ダイアグラムを別のプロジェクトにコピーする方法はありますか?
- 23. フィールドを別のフィールドにリンクするスマートな方法はありますか?
- 24. 別のブランチにローカル変更をdiffする方法はありますか?
- 25. .rodataセグメントを別のプログラムヘッダーにマップする方法はありますか?
- 26. UIScrollViewを別のスクロールビューに追加する方法はありますか?
- 27. にはScrapyをインストールする別の方法がありますか?
- 28. SMTP送信を別のサーバーにパススルーする方法はありますか?
- 29. Jenkinsミラーをバイパスする方法
- 30. ミラーAPIサブスクリプションをテストする方法
通常、JComponentをミラーリングするには、いくつかのコードを記述します。あなたはこれをしましたか?あなたが間違っていることを人々が見て、それを修正するのを助けるために投稿することができるかもしれません – Tibrogargan
'私は、オーバーライドされた描画メソッドを持つJLabelを持っています - ' draw()メソッドがないので、 JLabel。おそらく、あなたはBufferedImageでカスタムペインティングを行うべきです。次に、BufferedImageを使用してImageIconを作成することができます。アイコンは複数のラベルで共有できます。 – camickr
'RepaintManager'を使った別のアプローチは引用されています[ここ](http://stackoverflow.com/a/6333584/230513)。 – trashgod