如下面这段代码,我共设置了6个TextField,一行2个共3行,每次点击Tab键,焦点一次从1-6顺序获得,但是现在我希望将焦点的顺序为1、3、5来获得,不知道怎么设置,我试验了很多方法都不行,主要以增加addKeyListener为主,但是不知道能不能屏蔽掉组件获取焦点的功能?
import java.awt.*;
import javax.swing.*;import java.awt.event.*;public class Test extends JFrame{ public Test(){
this.setLayout(new GridLayout(3,4));
for(int i = 1; i < 7; i++){
JTextField field = new JTextField();
this.add(new JLabel("Field " + i));
this.add(field, new FlowLayout());
}
}
public static void main(String[] args){
Test test = new Test();
test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
test.setSize(400, 100);
test.setVisible(true);
}
}
import java.awt.*;
import javax.swing.*;import java.awt.event.*;public class Test extends JFrame{ public Test(){
this.setLayout(new GridLayout(3,4));
for(int i = 1; i < 7; i++){
JTextField field = new JTextField();
this.add(new JLabel("Field " + i));
this.add(field, new FlowLayout());
}
}
public static void main(String[] args){
Test test = new Test();
test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
test.setSize(400, 100);
test.setVisible(true);
}
}
import java.awt.Component;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.FocusTraversalPolicy;
import java.awt.GridLayout;import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;public class FTest extends JFrame { public FTest() {
final JTextField[] field = new JTextField[6];
this.setLayout(new GridLayout(3, 4));
for (int i = 0; i < 6; i++) {
field[i] = new JTextField();
this.add(new JLabel("Field " + (i + 1)));
this.add(field[i], new FlowLayout());
}
FocusTraversalPolicy p = new FocusTraversalPolicy() { @Override
public Component getLastComponent(Container aContainer) {
// TODO Auto-generated method stub
return field[0];
} @Override
public Component getFirstComponent(Container aContainer) {
// TODO Auto-generated method stub
return field[6];
} @Override
public Component getDefaultComponent(Container aContainer) {
// TODO Auto-generated method stub
return field[0];
} @Override
public Component getComponentBefore(Container aContainer,
Component aComponent) {
// TODO Auto-generated method stub
int i = 0;
for (; i < 6; i++) {
if (field[i] == aComponent)
break;
}
if (i == 1)
return field[4];
else if(i==0)
return field[5];
else
return field[i + 2];
} @Override
public Component getComponentAfter(Container aContainer,
Component aComponent) {
int i = 0;
for (; i < 6; i++) {
if (field[i] == aComponent)
break;
}
if (i == 4)
return field[1];
else if (i == 5)
return field[0];
else
return field[i + 2];
}
};
this.setFocusTraversalPolicy(p);
} public static void main(String[] args) {
FTest test = new FTest();
test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
test.setSize(400, 100);
test.setVisible(true);
}
}