Como fazer para o TAB selecionar só os itens que quero?

1 resposta Resolvido
B

Boa noite pessoal, tenho uns jtextfields, jbuttons e uma jtable, quando dou TAB ele passa pelos jtexts e vai para tabela, quando ele chega na tabela eu tenho que percorrer todas as linhas e colunas da tabela para que ele saia da tabela e só ai vá para os buttons. Queria saber se existe alguma forma de o TAB não ir para a tabela?

1 Resposta

B
Solucao aceita

Pra servir para as gerações futuras srsrsrs conseguir resolver usando o método FocusTraversalPolicy. Esse método te permite escolher quais campos você quer que tenha foco pelo TAB. No meu exemplo eu queria que ele fica-se apenas em duas barras, quantVenda e pesquisaProduto.
Primeiro você tem que construir a classe herdade eu chamei de controlFocusTraversalPolicy. Ficou assim:

import java.awt.FocusTraversalPolicy;

import java.util.ArrayList;

import java.awt.Component;

import java.awt.Container;

public class controlFocusTraversalPolicy extends FocusTraversalPolicy {

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

@Override
public Component getComponentAfter(Container focusCycleRoot, Component aComponent) {
    int idx = (order.indexOf(aComponent) + 1) % 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.get(order.size() - 1);
}

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

}

Depois disso eu fiz um método dentro do jframe e o importei para dentro do initComponents. Ficou assim;

public void controlFocus(){

ArrayList order = new ArrayList<>(2);

order.add(quantVenda);

order.add(pesquisaProduto);

controlFocusTraversalPolicy policy = new controlFocusTraversalPolicy(order);

setFocusTraversalPolicy(policy);

}

Pronto agora ele só foca esses dois campos e na ordem que eu escolhi.

Criado 9 de agosto de 2018
Ultima resposta 9 de ago. de 2018
Respostas 1
Participantes 1