- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前在实现 FocusTraversalPolicy
时遇到问题。
我希望 Tab
/Shift+Tab
键盘快捷键允许上下/左右导航。这将允许在填写表单时进行更简单的导航。
该策略应该只影响我的 JFrame
的 mainPanel
中的所有元素。
我已经使用以下类实现了政策:
public class DefaultViewFocusTraversalPolicy
extends FocusTraversalPolicy
{
ArrayList<Component> order;
public DefaultViewFocusTraversalPolicy(ArrayList<Component> order)
{
this.order = order;
}
@Override
public Component getComponentAfter(Container aContainer, Component aComponent)
{
int index = (order.indexOf(aComponent) + 1) % order.size();
Component after = order.get(index);
while (index < order.size() && !(after.isEnabled() && after.isVisible()))
{
index++;
after = order.get(index);
}
return after;
}
@Override
public Component getComponentBefore(Container aContainer, Component aComponent)
{
int index = order.indexOf(aComponent) - 1;
if (index < 0)
{
index = order.size() - 1;
}
Component before = order.get(index);
while (index >= 0 && !(before.isEnabled() && before.isVisible()))
{
index--;
before = order.get(index);
}
return before;
}
@Override
public Component getFirstComponent(Container aContainer)
{
int index = 0;
Component first = order.get(index);
while (index < order.size() && !(first.isEnabled() && first.isVisible()))
{
index++;
first = order.get(index);
}
return first;
}
@Override
public Component getLastComponent(Container aContainer)
{
int index = order.size() - 1;
Component last = order.get(index);
while (index >= 0 && !(last.isEnabled() && last.isVisible()))
{
index--;
last = order.get(index);
}
return last;
}
@Override
public Component getDefaultComponent(Container aContainer)
{
return getFirstComponent(aContainer);
}
}
然后我在 View 的构造函数中使用以下内容实例化该类(例如 main JFrame
):
ArrayList<Component> order = new ArrayList<>();
order.add(this.ecmID);
order.add(this.modeID);
// ...
DefaultViewFocusTraversalPolicy policy =
new DefaultViewFocusTraversalPolicy(order);
this.mainPanel.setFocusTraversalPolicy(policy);
但是,当我尝试通过 Tab 键浏览元素时,没有任何改变,之前的策略仍然有效。我已经尝试过 Java 教程:link
如有任何帮助,我们将不胜感激。
最佳答案
我不确定你为什么要为你的情况扩展 FocusTraversalPolicy
而默认的 FocusTraversalPolicy
应该为你完成这项工作。
但是,您需要设置this.mainPanel.setFocusCycleRoot(true)
:设置此Container是否为焦点遍历循环的根。一旦焦点进入遍历循环,通常它不能通过焦点遍历离开它,除非按下向上或向下循环键之一。正常遍历仅限于此容器,以及此容器的所有非劣质焦点循环根的后代。
您可以查看 ContainerOrderFocusTraversalPolicy
:
Container.getComponents()
返回的顺序确定遍历顺序它有一个很好的功能:boolean accept(Component aComponent)
:确定 Component 作为新的焦点所有者是否是可接受的选择。只需通过扩展此类来覆盖此函数,使用您不想关注 Container
的相应组件列表。 无需重写所有函数并实现它们。
关于Java Swing FocusTraversalPolicy 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20200589/
我有一个问题,当togglePolicy.isSelected()时,这段代码是否将newPolicy设置为null? if ("toggle".equals(e.getActionCommand()
我目前在实现 FocusTraversalPolicy 时遇到问题。 我希望 Tab/Shift+Tab 键盘快捷键允许上下/左右导航。这将允许在填写表单时进行更简单的导航。 该策略应该只影响我的 J
我有两个包含多个组件的 JPanel 对象。每个面板都有自己的FocusTraversalPolicy。 我想在第一个面板的第一个组件处开始焦点循环。当焦点到达第一个面板的最后一个组件时,当我按 Ta
我有一个 JPanel,其中添加了绝对位置(即“pos x y”)的组件,并且布局实际上是两列文本字段。我想要实现的目标是让 Tab 将焦点垂直转移到下一个组件,以便遍历第一列,然后遍历第二列。目前它
我正在努力为应用程序中的多个面板设置新的选项卡顺序。我想创建一个新类,它允许我以与已弃用的 setNextFocusableComponent 方法相同的方式处理排序。我正在创建一个扩展 Defaul
我有一个包含四个组件的 JFrame:三个 JPanel 和一个 JTabbedPane。两个面板具有可选择的组件,大约位于 BorderLayout.NORTH 和 EAST,而 JTabbedPa
这是我的第一个数据库模拟器 GUI,我很难使用 TAB 浏览用户输入文本字段。我的愿望是按以下顺序导航:从姓名到第一个姓氏,到第二个姓氏,到年龄,到电话号码,到地址,最后到电子邮件。老实说,我只是复制
我是一名优秀的程序员,十分优秀!