2016-02-19 4 views
0

После решения проблемы с фоновым изображением, я действительно не стал пытаться изменить политику фокуса.Настройка персонализированного FocusTraversalPolicy на вкладке в JTabbedPane

создать класс и переопределить методы, как это:

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

Я знаю, что это путь с опозданием, но я пытался что-то подобное недавно и задавался вопросом, почему траверс не работает, как я его установил.

недостающее линия для меня был:

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

Надеется, что это помогает.

 Смежные вопросы

  • Нет связанных вопросов^_^