将焦点设置到输入文本字段

Set focus to input textfield

我用 netbeans 创建了以下屏幕:

private void initComponents()
{
    java.awt.GridBagConstraints gridBagConstraints;

    panelWest = new javax.swing.JPanel();
    jLabel1 = new javax.swing.JLabel();
    jLabel2 = new javax.swing.JLabel();
    jLabel3 = new javax.swing.JLabel();
    jLabel4 = new javax.swing.JLabel();
    jLabel5 = new javax.swing.JLabel();
    textFieldScore = new javax.swing.JTextField();
    textFieldScore.setColumns(3);
    textFieldCourseRating = new javax.swing.JTextField();
    textFieldCourseRating.setColumns(4);
    textFieldCourseSlope = new javax.swing.JTextField();
    textFieldCourseSlope.setColumns(3);
    comboBoxCourse = new javax.swing.JComboBox<>();
    dateChooserAddScoresDate = new com.toedter.calendar.JDateChooser();
    chckbxAddScoresNineHoleScore = new javax.swing.JCheckBox();
    chckbxAddScoresTournamentScore = new javax.swing.JCheckBox();
    btnAddScoresAdd = new javax.swing.JButton();
    btnAddScoreDelete = new javax.swing.JButton();
    btnAddScoreDelete.setVisible(false);        // Initially turn "Delete" button off
    panelSouth = new javax.swing.JPanel();
    btnAddScoresExit = new javax.swing.JButton();

    setLayout(new java.awt.BorderLayout());

    textFieldScore.requestFocusInWindow();
    java.awt.GridBagLayout panelWestLayout = new java.awt.GridBagLayout();
    panelWestLayout.columnWidths = new int[] {0, 15, 0, 15, 0, 15, 0, 15, 0};
    panelWestLayout.rowHeights = new int[] {0, 10, 0, 10, 0, 10, 0, 10, 0, 10, 0, 10, 0, 10, 0, 10, 0};
    panelWest.setLayout(panelWestLayout);

    jLabel1.setText("Score");
    jLabel1.setFocusable(false);
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 0;
    gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
    panelWest.add(jLabel1, gridBagConstraints);

    jLabel2.setText("Date");
    jLabel2.setFocusable(false);
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 2;
    gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
    panelWest.add(jLabel2, gridBagConstraints);

    jLabel3.setText("Course");
    jLabel3.setFocusable(false);
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 4;
    gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
    panelWest.add(jLabel3, gridBagConstraints);

    jLabel4.setText("Course Rating");
    jLabel4.setFocusable(false);
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 6;
    gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
    panelWest.add(jLabel4, gridBagConstraints);

    jLabel5.setText("Course Slope");
    jLabel5.setFocusable(false);
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 8;
    gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
    panelWest.add(jLabel5, gridBagConstraints);
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 2;
    gridBagConstraints.gridy = 0;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
    panelWest.add(textFieldScore, gridBagConstraints);
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 2;
    gridBagConstraints.gridy = 6;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
    panelWest.add(textFieldCourseRating, gridBagConstraints);
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 2;
    gridBagConstraints.gridy = 8;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
    panelWest.add(textFieldCourseSlope, gridBagConstraints);

    comboBoxCourse.setEditable(true);
    comboBoxCourse.addActionListener(new java.awt.event.ActionListener()
    {
        public void actionPerformed(java.awt.event.ActionEvent evt)
        {
            comboBoxCourseActionPerformed(evt);
        }
    });
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 2;
    gridBagConstraints.gridy = 4;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
    panelWest.add(comboBoxCourse, gridBagConstraints);
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 2;
    gridBagConstraints.gridy = 2;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
    panelWest.add(dateChooserAddScoresDate, gridBagConstraints);
    dateChooserAddScoresDate.setDateFormatString("MM/dd/yy");

    chckbxAddScoresNineHoleScore.setText("Nine Hole Score");
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 4;
    gridBagConstraints.gridy = 0;
    panelWest.add(chckbxAddScoresNineHoleScore, gridBagConstraints);

    chckbxAddScoresTournamentScore.setText("Tournament Score");
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 6;
    gridBagConstraints.gridy = 0;
    panelWest.add(chckbxAddScoresTournamentScore, gridBagConstraints);

    btnAddScoresAdd.setText("Add");
    btnAddScoresAdd.addActionListener(new java.awt.event.ActionListener()
    {
        public void actionPerformed(java.awt.event.ActionEvent evt)
        {
            btnAddScoresAddActionPerformed(evt);
        }
    });
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 14;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
    panelWest.add(btnAddScoresAdd, gridBagConstraints);

    btnAddScoreDelete.setText("Delete");
    btnAddScoreDelete.addActionListener(new java.awt.event.ActionListener()
    {
        public void actionPerformed(java.awt.event.ActionEvent evt)
        {
            btnAddScoreDeleteActionPerformed(evt);
        }
    });
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 16;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
    panelWest.add(btnAddScoreDelete, gridBagConstraints);

    add(panelWest, java.awt.BorderLayout.CENTER);

    btnAddScoresExit.setIcon(IconUtils.getNavigationIcon("Back", 24));
    btnAddScoresExit.setText("Back");
    btnAddScoresExit.addActionListener(new java.awt.event.ActionListener()
    {
        public void actionPerformed(java.awt.event.ActionEvent evt)
        {
            btnAddScoresExitActionPerformed(evt);
        }
    });
    panelSouth.add(btnAddScoresExit);

    add(panelSouth, java.awt.BorderLayout.PAGE_END);
}

当屏幕显示时,我希望焦点位于得分字段 (textFieldScore) 中。我无法做到这一点。我试过 textFieldScore.requestFocusInWindow();和 textFieldScore.requestFocus;,但都不起作用。我怎样才能获得分数输入字段的焦点?

***** 已编辑 *****

最初,我没有 frame.pack() 声明。我在最后一个 getContentPane().add(as, ADDSCORES) 之后添加了以下代码; (我所有的卡片。

this.pack();
AddScores.textFieldScore.requestFocusInWindow();
this.setVisible(true);

这没什么区别。

如果你把所有的代码都放上去会更容易判断。基本上,您需要确保在显示框架之前请求焦点。所以如果你在一个框架中初始化这些组件,它应该是

frame.pack();  
textFieldScore.requestFocusInWindow(); 
frame.setVisible(true);

This is the second card displayed.

听起来您正在使用 CardLayout。 CardLayout 有一个问题,它没有将焦点放在新显示的面板上。

查看 Card Layout Focus 改进的 CardLayout,它将自动为您将焦点设置在第一个组件上。

如果您不想使用此代码,则需要在更改卡片后将焦点设置在组件上,并且面板现在在 GUI 上可见。