CardLayoutの前のタブを表示します
-
10-10-2019 - |
質問
私はこれを理解するのに苦労しています。
状況を想像するのは難しいことではないので、サンプルコードなしでこれを投稿できることを願っています。私はcardlayoutとjpanelを持っています。パネルには、個々のタブとして他のいくつかのパネルが含まれています。私がAChiveにしようとしているのは、メインパネルショーが最後に開かれたタブ(現在が表示される前のもの)を作成するJButtonを作成することです。最初は考えていませんでした。
そこで、現在の可視タブ(パネル)を取得する方法を考えて始めましたが、パネルにはネイティブメソッドがないか、最初の()、last()、next()、およびfortior()のみを含むcardlayoutにはありません。私には役に立たない。
それから、私の目標を達成するために、メインパネルのすべてのコンポーネントを通過し、現在のコンポーネントが見えるものをテストするかもしれないと思いました。私はそれが少し複雑であると思いますが、CardLayoutメソッドショー(親、名前)に電話するカード名がない場合、CardLayoutでこのパネルショーを作成するにはどうすればよいですか?
この時点で、私にはわかりません。私はインターネットで検索してきましたが、解決策を見つけていませんが、似たようなことを理解しようとしている人はほとんどいませんでした。だから私はこの種の問題を既にデリットしている人がこのトピックに出くわすことを願っています:-)
提案をありがとう。
よろしくお願いします
マーティンS.
解決
これにより、そもそも現在のカードに到着した方法の問題が発生します。使用した場合 next()
現在のカードに到達するために previous()
前のカードに到達し、その逆になります。使用する場合 first()
また last()
, 、それからあなたは運が悪い。
もちろん、あなたはいつでも保存されている情報の一部を複製することができます CardLayout
目標を達成するために:コンポーネント名の配列を維持している場合(および電話するたびに更新します addLayoutComponent
)以前のインデックスと同様に(そしてこれを更新します next
, previous
その他の呼び出し)、それからあなたは前のコンポーネントの名前を検索して使用することができます show
前のカードを表示します。
アップデート: タブ名を知っているので、以前のタブ名を維持する方法は次のとおりです。
String prevTab, curTab;
public void showTab(String newTab) {
prevTab = curTab;
curTab = newTab;
layout.show(parent, curTab);
}
public void goBack() {
layout.show(parent, prevTab);
}
他のヒント
マップオブジェクトマップを作成できます。カードレイアウトとマップにパネルと名前を追加します。その後、以前にjpanelを表示した場合、Map.get(JPanel P)を介してMapから名前を取得します。そして、瞬間前にjPanelが見えるものを見つけるには、各jPanelにコンポーネントリステナーを追加する必要があります。 ComponentHiddenイベント(static jPanel prev_shownなど)で静的変数を変更するようにします。