您的位置:首页 > 其它

Swing中按Tab键使控件按照一定的顺序被选中

2006-12-26 14:46 211 查看
focusOrderList = new ArrayList<Component>();
focusOrderList.add(muteRadio);
focusOrderList.add(defaultRadio);
focusOrderList.add(manualRadio);
focusOrderList.add(fileTxtField);
focusOrderList.add(selectBtn);
focusOrderList.add(playBackBtn);
focusOrderList.add(okBtn);
focusOrderList.add(cancelBtn);
focusPolicy = new MyOwnFocusTraversalPolicy();
//FoucusPolicyの設定
this.setFocusTraversalPolicy(focusPolicy);

/**
* FocusTraversalPolicy
*
*/
public class MyOwnFocusTraversalPolicy extends FocusTraversalPolicy {
/**
*
* @param focusCycleRoot Container
* @param aComponent Component
* @return Component
*/
public Component getComponentAfter(Container focusCycleRoot,
Component aComponent) {

int nIDx = focusOrderList.indexOf(aComponent);

int nAfter;
if (nIDx == focusOrderList.size() - 1) {
nAfter = 0;
} else {
nAfter = nIDx + 1;
}

Component component = focusOrderList.get(nAfter);

boolean bContinue = false;

if (!component.isEnabled()) {
bContinue = true;
} else if (component instanceof JTextField) {
JTextField txtField = (JTextField) component;
if (!txtField.isEditable()) {
bContinue = true;
}
}

if (bContinue) {
return getComponentAfter(focusCycleRoot, component);
} else {
return component;
}
}
/**
*
* @param focusCycleRoot Container
* @param aComponent Component
* @return Component
*/
public Component getComponentBefore(Container focusCycleRoot,
Component aComponent) {

int nIDx = focusOrderList.indexOf(aComponent);

int nBefore;
if (nIDx == 0) {
nBefore = focusOrderList.size() - 1;
} else {
nBefore = nIDx - 1;
}

Component component = focusOrderList.get(nBefore);

boolean bContinue = false;

if (!component.isEnabled()) {
bContinue = true;
} else if (component instanceof JTextField) {
JTextField txtField = (JTextField) component;
if (!txtField.isEditable()) {
bContinue = true;
}
}

if (bContinue) {
return getComponentBefore(focusCycleRoot, component);
} else {
return component;
}

}
/**
*
* @param focusCycleRoot Container
* @return Component
*/
public Component getDefaultComponent(Container focusCycleRoot) {
Component component = focusOrderList.get(0);
return component;
}
/**
*
* @param focusCycleRoot Container
* @return Component
*/
public Component getLastComponent(Container focusCycleRoot) {
Component component = focusOrderList.get(focusOrderList.size() - 1);
return component;
}
/**
*
* @param focusCycleRoot Container
* @return Component
*/
public Component getFirstComponent(Container focusCycleRoot) {
Component component = focusOrderList.get(0);
return component;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: