3

私はこれを理解するのに苦労しています。

状況は想像に難くないので、サンプルコードなしで投稿できればと思います。私は CardLayout で JPanel を持っています。パネルには、個別のタブとして他のいくつかのパネルが含まれています。私が達成しようとしているのは、メインパネルに最後に開いたタブ (現在のタブが表示される前のタブ) を表示する JButton を作成することです。大したことはないと最初は思いました。

そこで、現在表示されているタブ (パネル) を取得する方法を考えることから始めたところ、Panel にはそのためのネイティブ メソッドがなく、メソッド first()、last()、next()、previous() のみを含む CardLayout がないことがわかりました。私には役に立たない。

次に、目標を達成するために、メインパネルのすべてのコンポーネントを調べて、どれが現在のものであるかをテストするかもしれないと考えました。少し複雑ですが、CardLayout メソッド show(parent, name) を呼び出すカード名がない場合、このパネルを CardLayout で表示するにはどうすればよいですか?

この時点で、私にはわかりません。私はインターネットで検索してきましたが、解決策が見つかりませんでした。同様のことを理解しようとしている人はほとんどいません。ですから、この種の問題にすでに取り組んでいる人がこのトピックに出くわすことを願っています:-)

提案をありがとう。

よろしくお願いします

マーティン S.

4

2 に答える 2

2

これは、そもそもどのようにして現在のカードにたどり着いたかという問題を提起します。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);
}
于 2010-11-14T17:38:50.897 に答える
0

マップ オブジェクト Map を作成できます。そして、パネルと名前をカード レイアウトとマップに追加します。その後、前に示した JPanel がある場合は、map.get(JPanel p) を介してマップからその名前を取得します。また、直前に表示されていた JPanel を見つけるには、各 JPanel に ComponentListener を追加する必要があります。また、componentHidden イベントでいくつかの静的変数を変更するようにします (例: static JPanel prev_shown)。

于 2010-11-14T17:44:24.767 に答える