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;
}
}
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;
}
}
相关文章推荐
- C++ MFC / VS2013 之八 (对话框:设置对话框控件的Tab顺序)
- VC按TAB键控制控件顺序
- CWnd中创建控件修改其TAB顺序
- VS2010/MFC设置对话框控件的Tab顺序
- 控件的TAB顺序
- 鸡啄米vc++2010系列9(对话框控件的Tab顺序)
- Ctrl+D修改对话框控件的Tab顺序
- [转载]如何改变VC中控件间的TAB切换顺序
- 数据库中查询结果按照一定的顺序获得
- 请问怎么在VC++中,怎样控制控件的TAB键顺序?
- 【mark】如何改变VC中控件间的TAB切换顺序
- VC如何设置控件Tab顺序
- MFC中控件的TAB顺序
- Unity3D 使用“Shift+Tab”和“Tab”键 上下切换 UGUI下 Dropdown和inputfield等控件的控制顺序
- 实现按ENTER,TAB可以按程序输入的控件顺序顺序移动
- VC动态改变控件的TAB顺序
- 按TAB顺序枚举窗口中的各个控件
- 鸡啄米vc++2010系列9(对话框控件的Tab顺序)
- VS2010/MFC编程入门之九(对话框:设置对话框控件的Tab顺序)
- 如何控制 VC 中控件间的TAB切换顺序