0

Jframeに2つのJPanelがあります。上部パネルには1つのJComboboxがあります。下のパネルには、上のパネルのコンボボックスでの選択に基づいて、さまざまなコンポーネントが動的に入力されます。下のパネルに追加されるコンポーネントのタイプと数は常に動的です。以下の例-

下部JPanel:

JLabelA:JCombobox

JLabelB:JCombobox + JTextfield

JLabelC:JCombobox1 + JCombobox2 + JCombobox3

JLabelD:JList

ユーザーは、目的のコンポーネントの値を選択/入力してから、[送信]ボタンをクリックできます。ボタンをクリックすると。カスタム検証を行う必要があります(たとえば、一部のコンポーネントは必須、一部はオプションであり、上記のJLabelCの場合、3つのコンボボックスすべてで値が選択されています)。すべての検証に合格したら、下のパネルでユーザーが選択/提供した値を取得する必要があります。下のパネルのコンポーネントの名前は固定されていないため、値を直接フェッチすることはできません。1つのアプローチは、下部パネルのすべてのコンポーネントを1つずつトラバースし、値を選択することです。ユーザーが何らかの入力を提供したものだけをトラバースする必要があるのに対し、すべてをトラバースする必要があるため、これはあまり効率的ではないようです。

クエリ-

1)検証をコンポーネントにアタッチするにはどうすればよいですか(JavaScript検証で実行できるように)?

2)コンポーネントの値を取得するための代替アプローチを提案してください。

4

1 に答える 1

0

JComponents をトラバースし、多目的リスナーをコンボボックス、テキストフィールドなどにバインド/バインド解除する (レガシー) コードを見たことがあります。それが機能していたことを思い出します (「ダーティ」リスナーをすべての編集可能なウィジェットにアタッチするためのものでした)。ユーザーが未保存の変更を残さないようにします)。

リアルタイムの検証を行う場合は、ChangeListeners または ActionListeners を JComboBoxes にアタッチするか、JLists および DocumentListeners を JTextField ドキュメントにアタッチできます。私は InputVerifiers を使用してみましたが、通常、コンポーネントのフォーカスをいじると、ユーザーにとって問題になります。

于 2012-08-23T08:00:13.160 に答える