JavaのCardLayoutで一番上のカードを取得することは可能ですか? 私は各コンポーネントをループして、isVisible()の可視性をチェックしようとしましたが、それらはすべて「可視」であるようです。JavaのCardLayoutで一番上のカードを取得する方法
編集:「トップカード」とは、現在表示されている「トップ」にあるものを意味し、最初または最後のカードではありません。また、それは場合に役立ちます私は知らないが、私は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
です。また、その中の1枚が私が見ていたものかどうかを調べるために、その内容を調べる必要がありました。私はisVisible()
のスクロールペイン自体をチェックしていませんでした。私はそれが常に目に見えていると主張していました。確認する必要があるのはスクロールペインです。
CardLayout.first()
の実装では
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;
}
@RDのコードスニペットは、CardLayoutを使用するJPanelの 'getCurrentPanel()'メソッドの試行に由来します。私はJPanelを他の理由で拡張しました。したがって、私はそれにアクセスできます。 – alexcoco
あなたのコードをすべて見ることなく、何がうまくいかないのかは分かりませんが、私のTestFrameコードは一度に1つの目に見えるカードしか正しく見つけることができません。 –
@alexcoco、関連コードをgetCurrentCard()メソッドに入れるように編集しました。 –