2016-02-19 55 views
0

解決了背景圖像的問題後,我真的試圖改變焦點策略。在JTabbedPane的選項卡上設置個性化的FocusTraversalPolicy

我創建類和重載的方法是這樣的:

package tab; 

import java.awt.Component; 
import java.awt.Container; 
import java.awt.FocusTraversalPolicy; 
import java.util.Vector; 

public class MyOFocusTraversalPolicy extends FocusTraversalPolicy{ 

    Vector<Component> order; 

    public MyOFocusTraversalPolicy(Vector<Component> order) { 
     this.order = new Vector<Component>(order.size()); 
     this.order.addAll(order); 
    } 

    @Override 
    public Component getComponentAfter(Container focusCycleRoot, 
      Component aComponent) { 
     int idx = (order.indexOf(aComponent) + 1);// % order.size(); 
     System.out.println("Estoy en el getComponentAfter, numero: "+idx); 
     System.out.println("El tamaño del vector es de:"+order.size()); 
     return order.get(idx); 
    } 

    @Override 
    public Component getComponentBefore(Container focusCycleRoot, 
      Component aComponent) { 
     int idx = order.indexOf(aComponent) - 1; 
     if (idx == 0) { 
      idx = order.size() - 1; 
     } 
     return order.get(idx); 
    } 

    @Override 
    public Component getDefaultComponent(Container focusCycleRoot) { 
     return order.get(0); 
    } 

    @Override 
    public Component getLastComponent(Container focusCycleRoot) { 
     return order.lastElement(); 
    } 

    @Override 
    public Component getFirstComponent(Container focusCycleRoot) { 
     return order.get(1); 
    } 

} 

我做載體,在該選項卡中的所有組件,並宣佈MyOFocusTraversalPolicy的新對象,像這樣:

Vector<Component> order = new Vector<Component>(14); 
      order.add(rBtnHombre); 
      order.add(rBtnMujer); 
      order.add(spinEdad); 
      order.add(slider); 
      order.add(txtUser); 
      order.add(txtPass); 
      order.add(txtConfirmPass); 
      order.add(txtNombre); 
      order.add(txtApellidos); 
      order.add(cBoxProvincias); 
      order.add(cBoxTipoCalle); 
      order.add(txtDireccion); 
      order.add(txtCP); 
      order.add(txtMail); 

      newPolicyDatos = new MyOFocusTraversalPolicy(order); 
      datos.setFocusTraversalPolicy(newPolicyDatos); 

但它沒有效果。

問題可能是因爲「datos」是屬於JTabbedPane的三個選項卡中的其中一個,對於其他任何我已用完的想法,並且我無法在選項卡上找到有關FocusTraversalPolicy的特定信息。

我已在getComponentAfter打印,並通過前

希望有人已經嘗試這樣做,可以給我一個手

回答

0

我知道這是方式過期組件Tab鍵時,它並不顯示,但我最近一直在嘗試類似的東西,並想知道爲什麼遍歷不能像我設置的那樣工作。

的缺失行對我來說是:

myJTabbedPane.add(outerMostJPanel); 
outerMostJPanel.setFocusCycleRoot(true); // magic-line 
outerMostJPanel.setFocusTraversalPolicy(new MyFocusTraversalPolcy(...)); 

希望這有助於。

相關問題