3

私はそれを検索しましたが、正しい答えが見つかりませんでした。インスペクタ タブ内のコンポーネントの配置により、自動タブ インデックスが作成されると言う人もいます。しかし、うまくいきませんでした。では、netbeans には本当にタブ プロパティがあるのでしょうか?

4

5 に答える 5

4

このコードを使用するだけで、setNextFocusableComponent()を使用して機能します

buttonA.setNextFocusableComponent(buttonB);
buttonB.setNextFocusableComponent(buttonC);
于 2013-01-02T11:39:46.550 に答える
2

Yogendra Singh の回答にコメントするつもりでしたが、サインアップしたばかりでできません。Yogendra の答えはほぼ完璧ですが、誰かが別のコンポーネントをクリックしてフォーカスを変更した場合に何が起こるかを考慮していません。focusNumber は引き続き古いコンポーネントに設定され、タブを押すと間違ったコンポーネントに移動します。

回答を変更すると、この問題がわずかに修正されます。

List<Component> elementList = new ArrayList<Component>();
elementList.Add(element1);
elementList.Add(element2);
...
elementList.Add(elementx);
setFocusTraversalPolicy(new CustomFocusTraversalPolicy());


private class CustomFocusTraversalPolicy extends FocusTraversalPolicy {   

    public Component getComponentAfter(Container focusCycleRoot,Component aComponent)    {   
        int currentPosition = elementList.indexOf(aComponent);
        currentPosition = (currentPosition + 1) % elementList.size();   
        return (Component)elementList.get(currentPosition);   
    }   
    public Component getComponentBefore(Container focusCycleRoot,Component aComponent)    { 
        int currentPosition = elementList.indexOf(aComponent);
        currentPosition = (elementList.size() + currentPosition - 1) % elementList.size();   
        return (Component)elementList.get(currentPosition);   
    }
    public Component getFirstComponent(Container cntnr) {
        return (Component)elementList.get(0);
    }
    public Component getLastComponent(Container cntnr) {
        return (Component)elementList.get(focusList.size() - 1);
    }
    public Component getDefaultComponent(Container cntnr) {
        return (Component)elementList.get(0);
    }
}
于 2014-05-17T09:52:39.467 に答える
1

GUI エディターは、initComponents で次のコードを生成します。

jTabbedPane1.addTab("tab1", jTextField1);

insertTabwith インデックスを使用すると、これはカスタマイズできないようです。([レイアウト] グループの [プロパティ] に表示されていたはずです)。

したがって、最善の方法は、insertTabまたは以下を使用して、完全にコードでタブ コンポーネントを生成することです。

jTabbedPane1.add(jTextField1, index);
于 2012-10-18T13:29:47.133 に答える
1

要素を保持するように定義Component[] elementsListし、要素を拡張して希望FocusTraversalPolicyの順序で設定します 。elementsList

 Component[] elementsList = new Component[]{elem1,elem2,elem3};
 setFocusTraversalPolicy(new MyFocusTraversalPolicy());


 public class CustomFocusTraversalPolicy extends  FocusTraversalPolicy    {   

  public Component getComponentAfter(Container focusCycleRoot,Component aComponent)    {   
   focusNumber = (focusNumber+1) % focusList.length;   
   return (JTextField)focusList[focusNumber];   
  }   
  public Component getComponentBefore(Container focusCycleRoot,Component aComponent)    { 
   focusNumber = (focusList.length+focusNumber-1) % focusList.length;   
   return (JTextField)focusList[focusNumber];   
 }
}
于 2012-10-18T06:17:43.870 に答える