2

在我的 Java Swing 应用程序中,Reuestfocus 方法在构造函数中不起作用。但如果我使用 requestfocus 和按钮动作监听器,它就可以工作。我想在表单加载时设置 Requestfocus。我不明白这里有什么问题。PS我使用JInternal Frame

  txtItemName.requestFocusInWindow (); // did not work
  txtItemName.requestFocus ();  // did not work

  public ItemMgt() {

        initComponents();

        SwingUtilities.invokeLater(new Runnable() {
              @Override
              public void run() {
                    txtItemName.requestFocus(); // did not work
              }
        });
  }

  private void formInternalFrameActivated(javax.swing.event.InternalFrameEvent evt) {
        txtItemName.requestFocus(); // did not work.
  }
4

2 回答 2

2

这种情况可能是因为您的组件不可见,因此 GUI 管理器无法对其设置焦点。

如文档中所述:

(..) 组件必须是可显示的、可聚焦的、可见的,并且它的所有祖先(顶级窗口除外)都必须可见,才能授予请求。

通常,您应该避免在构造函数中使用如此健壮的逻辑。应该首先构建您的图形组件。完成后,应根据您的喜好对其进行调整。

建议使用requestFocusInWindow() 代替 requestFocus()更多信息请访问教程:如何使用焦点子系统

于 2013-04-02T08:21:54.100 回答
0

如果您使用的是 Netbeans IDE,那么它会容易得多。只需通过取消选中“属性”窗口中的“可聚焦”属性来确保文本框之前的所有控件都不可聚焦。这将使您的文本框成为第一个可聚焦控件,从而允许它在打开内部框架时接收焦点

于 2017-12-04T04:35:03.783 回答