在 JTabbedPane 中的选项卡上设置个性化的 FocusTraversalPolicy
Setting personalized FocusTraversalPolicy on tab in JTabbedPane
解决了背景图片的问题后,我真的无法尝试更改焦点策略。
我创建了 class 并覆盖了这样的方法:
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 中设置了一个打印,但在通过组件切换时它没有显示
希望有人曾经尝试过这个并且可以帮助我
我知道这太晚了,但我最近一直在尝试类似的东西,想知道为什么遍历不能像我设置的那样工作。
我缺少的行是:
myJTabbedPane.add(outerMostJPanel);
outerMostJPanel.setFocusCycleRoot(true); // magic-line
outerMostJPanel.setFocusTraversalPolicy(new MyFocusTraversalPolcy(...));
希望对您有所帮助。
解决了背景图片的问题后,我真的无法尝试更改焦点策略。
我创建了 class 并覆盖了这样的方法:
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 中设置了一个打印,但在通过组件切换时它没有显示
希望有人曾经尝试过这个并且可以帮助我
我知道这太晚了,但我最近一直在尝试类似的东西,想知道为什么遍历不能像我设置的那样工作。
我缺少的行是:
myJTabbedPane.add(outerMostJPanel);
outerMostJPanel.setFocusCycleRoot(true); // magic-line
outerMostJPanel.setFocusTraversalPolicy(new MyFocusTraversalPolcy(...));
希望对您有所帮助。