Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JTabbedPane的选项卡上设置个性化FocusTraversalPolicy_Java_Focus_Jtabbedpane - Fatal编程技术网

Java 在JTabbedPane的选项卡上设置个性化FocusTraversalPolicy

Java 在JTabbedPane的选项卡上设置个性化FocusTraversalPolicy,java,focus,jtabbedpane,Java,Focus,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&l

在解决了背景图像的问题后,我真的不想改变焦点策略

我创建类并重写如下方法:

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);
    }

}
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);
package选项卡;
导入java.awt.Component;
导入java.awt.Container;
导入java.awt.FocusTraversalPolicy;
导入java.util.Vector;
公共类聚焦政策扩展了聚焦政策{
向量顺序;
公共肌聚焦策略(矢量顺序){
this.order=新向量(order.size());
this.order.addAll(订单);
}
@凌驾
公共组件getComponentAfter(容器焦点),
组件(组件){
int idx=(order.indexOf(aComponent)+1);//%order.size();
System.out.println(“Estoy en el getComponentAfter,数字:“+idx”);
System.out.println(“El-tamaño del vector es de:”+order.size());
退货订单.get(idx);
}
@凌驾
公共组件getComponentBefore(容器焦点),
组件(组件){
int idx=订单indexOf(组件)-1;
如果(idx==0){
idx=order.size()-1;
}
退货订单.get(idx);
}
@凌驾
公共组件getDefaultComponent(容器focusCycleRoot){
退货订单。获取(0);
}
@凌驾
公共组件getLastComponent(容器焦点Cycleroot){
退货订单。lastElement();
}
@凌驾
公共组件getFirstComponent(容器焦点Cycleroot){
退货订单。获取(1);
}
}
我用选项卡中的所有组件创建向量,并声明一个新的MyOFocusTraversalPolicy对象,如下所示:

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);
    }

}
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);
向量顺序=新向量(14);
订单。添加(rBtnHombre);
订单。添加(rBtnMujer);
订单。添加(spinEdad);
添加(滑块);
订单。添加(txtUser);
订单。添加(txtPass);
订单。添加(txtConfirmPass);
订单。添加(txtNombre);
订单。添加(txtApellidos);
订单。添加(cBoxProvincias);
订单。添加(cBoxTipoCalle);
订单。添加(txtdirecion);
订单.添加(txtCP);
order.add(txtMail);
newPolicyDatos=新的肌瘤转移策略(顺序);
datos.setFocusTraversalPolicy(新政策datos);
但它没有效果

问题可能是因为“datos”是属于JTabbedPane的三个选项卡之一,对于其他任何内容,我已经没有想法了,并且在选项卡上找不到关于聚焦策略的具体信息

我已经在getComponentAfter中设置了一个打印,当在组件中进行选项卡切换时,它不会显示


希望以前有人试过,能帮我一下

我知道这已经过期了,但最近我一直在尝试类似的方法,不知道为什么导线测量不能像我设置的那样工作

我缺少的一行是:

myJTabbedPane.add(outerMostJPanel);
outerMostJPanel.setFocusCycleRoot(true); // magic-line
outerMostJPanel.setFocusTraversalPolicy(new MyFocusTraversalPolcy(...));
希望这有帮助