【问题标题】:Simulate focus changes in JUnit [GUI/Swing]在 JUnit [GUI/Swing] 中模拟焦点变化
【发布时间】:2015-07-23 18:43:43
【问题描述】:

我正在测试我们的(考试项目)应用程序。在这种特殊情况下,我正在测试文本字段在焦点更改时的行为。

JTextField main = xa.getTextField();
String prompt = "Insert text";
String selected = "";

    assertTrue(!main.isFocusOwner());
    assertTrue(main.getText().equals(prompt));

    main.requestFocusInWindow();

    assertTrue(main.isFocusOwner());
    assertTrue(main.getText().equals(selected));

最后两个 assertTrue 语句引发断言错误。为什么是这样?我也尝试了 requestFocus() ,结果相同。

【问题讨论】:

标签: java swing junit


【解决方案1】:

使用grabFocus()

JTextField main = xa.getTextField();

main.grabFocus();

assertTrue(main.isFocusOwner());

在此处查看其他解决方案: How to Set Focus on JTextField?

【讨论】:

    【解决方案2】:

    组件不会立即获得焦点。也就是说,焦点请求是异步执行的。因此,当您的代码执行时,焦点的更改尚未完成。

    阅读Requesting Focus 部分。一条评论特别指出:

    developers must never assume that this Component is the focus owner until this Component receives a FOCUS_GAINED event.

    另请阅读Focus and PropertyChangeListener 部分,因为 KeyboardFocusManager 可以侦听所有焦点更改,因此您无需为每个组件添加 FocusListener。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-20
      • 1970-01-01
      • 2021-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多