1

FlowLayout を使用し、多くの JButton を含む JPanel があります。ボタンは (FlowLayout による) 2 次元グリッドにあります。JPanel はサイズ変更できます。もちろん、その場合、グリッド内のボタンの位置が変更されます (もちろん、順序は同じままです)。ユーザーがキーボードの矢印キーを使用して、グリッド内の 1 つのボタンから別のボタンに移動できるようにしたいと考えています。

特定のボタンについて、現在どのボタンがその真上にあり、どのボタンがその真下にあり、どのボタンがそのすぐ左と右にあるかを知る方法はありますか?

明らかに、これは GridLayout を使用している場合は簡単ですが、別の理由で FlowLayout を使用する必要があります。

4

2 に答える 2

2

左右の矢印キーは問題ありません。jzd で述べたように、KeyStrokes をトラバーサル キーのセットに追加するだけです。

上/下キーについては、カスタム アクションを作成する必要があります。現在のコンポーネントの場所を使用できます。次に、上に移動すると、たとえば 10 ピクセル (コンポーネント間の行ギャップの 5 ピクセルと追加の 5 ピクセル) で調整された Y を変更できます。次に、次を使用できます。

Container.getComponentAt(Point p) 

その新しい場所でコンポーネントを見つけます。

下に移動するには、ボタンの位置から始めて、ボタンの高さに 10 ピクセルを加えた値を追加します。

もちろん、キー バインドを使用してアップ/ダウン キーストロークをアクションにバインドします。

注:コンポーネントの上または下のコンポーネントを見つけるために、5つの余分なピクセルを追加する必要があるかどうかはわかりません。縦の隙間を利用できるかもしれません。getComponentAt() メソッドで境界チェックがどのように機能するかはわかりません。

于 2011-04-26T18:00:08.200 に答える
1

FlowLayoutタブまたはシフトが選択されたボタンを正しくナビゲートするときに、適切なフォーカストラベル実装を使用できると思います。

のようなセットに矢印キーを追加するだけでよいと思いますforwardDefaultFocusTraversalKeys

より詳しい情報:

http://download.oracle.com/javase/tutorial/uiswing/misc/focus.html

于 2011-04-26T17:34:47.527 に答える