Jpanelに指定したJLableがあるか判定したい
のでどうすればいいか教えてください!
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
swingではコンポーネントは「たかだか一つの特定の親に含まれる」というルールがあります。どの親にも含まれてなければ「含まれている親がいない」という意味で「親はnull」という状態となります。一方swingコンテナは一般に複数の子供コンポーネントを持ちます。
なので「あるコンテナの全ての子供の中から特定の子供がいるか調べる」より「子供の親を調べる」方が簡単です。
つまり、あるJLabelインスタンス=label, あるJPanelインスタンス=panelがあったとして、labelがpanelの子供かどうか判定するには、こうすればよいです。
java
1if (label.getParent() == panel) { 2 // labelはpanelに含まれている(panelの子供である) 3} else { 4 // 含まれてない 5}
追記:suyamaさんの回答を拝見して気づいたので質問者さんへ補足します。
suyamaさんの方法は「ある条件であるようないずれかのJLabelをJPanelインスタンスが含むか」を判定する場合の方法です。例えば「名前が"aaa"のJLabelが含まれるか」判定したい場合に適しています。
一方自分の方法は「判定対象のJLabelインスタンスがわかっていて、それが特定のJPanelインスタンスに含まれるか」を判定する方法です。
投稿2017/10/05 22:45
編集2017/10/05 23:00総合スコア18394
0
まずはJavadocを参照するようにしましょう。
上記を見ると、JPanelは java.awt.Container から継承されたメソッドとしてgetComponentやgetComponentsを持つことが分かります。
それぞれのメソッドの説明を見るとgetComponentsには注意事項があるようなので、getComponentCountで要素数を取得して、getComponentで各要素を取得して対応する形がよさそうです。
コードにすると下記のようになるでしょうか。
java
1for (int i = 0; i < jPanel.getComponentCount(); i++) { 2 Component component = jPanel.getComponent(i); 3 if (component instanceof JLabel) { 4 // FIXME 指定したJLabelか比較する処理を記述 5 } 6}
投稿2017/10/05 22:43
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。