JavaのCardLayoutで一番上のカードを取得することは可能ですか? isVisible() で可視性をチェックするために各コンポーネントをループしようとしましたが、それらはすべて「可視」のようです。
編集:「トップカード」とは、最初または最後のカードではなく、現在「トップ」に表示されているカードを意味します。また、それが役立つかどうかはわかりませんが、JPanel(またはそのサブクラス)を探しています
編集:コードスニペット
for (Component component : getComponents()) {
if (component instanceof JPanel && component.isVisible()) {
currentPanel = (JPanel) component;
System.out.println(currentPanel.getClass().getName());
}
}
上記のコードは、可視カードであるかどうかに関係なく、すべてのコンポーネント クラスの名前を常に出力します。
編集:私はこれを学校の課題の一部として使用しています。私はここで景品を手に入れようとしているわけではありません.課題はこのレイアウトを中心に展開していません. パネルを切り替えるのに最も便利なレイアウトのようです。私の先生は、プロジェクトにサードパーティのコードを入れないように指定しました。以前にcamickrのリンクから実装を見たことがありますが、使用できません。同様の機能を大まかに実装して、ドキュメントで参照することはできますが、単純にダウンロードして使用することはできません。
編集:一番上のカードを取得しようとしている理由は、「追加」ボタンのあるツールバーがあるためです。2 つの可能性のあるものごとに 1 つの追加ボタンを用意する代わりに、現在表示されているパネルを確認するだけで、どれを追加するかを知ることができるようにしたいと考えました。これを行うためのより適切な方法が他にある場合は、お知らせください。
編集:助けてくれてありがとう。私は問題が何であるかを理解しました。十分な詳細を提供しなかったので、それは私のせいだと思います。私のカードの 2 枚はJScrollPane
s であり、その内容を調べて、これらのパネルの 1 つが私が見ているものであるかどうかを確認する必要もありました。私はスクロール ペイン自体をチェックしませんでしたisVisible()
。常に表示されている競合を調べていました。確認する必要があるのはスクロール ペインでした。
public JPanel getCurrentPanel() {
JPanel currentPanel = null;
for (Component component : getComponents()) {
if (component.isVisible()) {
if (component instanceof JPanel)
currentPanel = (JPanel) component;
else if (component instanceof JScrollPane)
currentPanel = (JPanel) ((JScrollPane) component).getViewport().getComponent(0);
}
}
return currentPanel;
}