2016-09-24 97 views
0

我創建了下面的屏幕與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); 
} 

That looks as following:

當屏幕顯示我想重點是在得分字段(textFieldScore)。我無法做到這一點。我已經嘗試過textFieldScore.requestFocusInWindow();和textFieldScore.requestFocus ;,但都不起作用。我如何才能將注意力集中到分數輸入字段?

*****編輯*****

本來我沒有frame.pack()語句。在我的最後一個getContentPane()。add(as,ADDSCORES)之後添加了以下代碼; (我所有的卡。

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

這並沒有區別。

+0

爲了更快得到更好的幫助,請發佈[MCVE]或[簡短,獨立,正確的示例](http://www.sscce.org/)。 –

回答

1

這是第二張牌顯示。

像您使用CardLayout一樣的聲音。 CardLayout存在一個問題,它不會將焦點放在新顯示的面板上。

檢查出Card Layout Focus改進的CardLayout,它會自動將焦點設置爲您的第一個組件。

如果您不想使用此代碼,則需要在更改卡後將焦點設置在組件上,並且現在可在GUI上看到面板。

+0

謝謝,就是這樣。其實我的問題是[鏈接]的副本(http://stackoverflow.com/questions/6066642/get-focus-on-a-jtextfield-inside-a-cardlayout)。增加了addComponentListener,它工作正常。謝謝。 –

+0

@PeterReam,這裏介紹的解決方案是一個更通用的解決方案,可以用於任何CardLayout,即使在有多個面板時也能正常工作。使用上述鏈接的方法可以正常工作,但這意味着每次使用CardLayout時都需要繼續編寫自定義ComponentListener。 – camickr

+0

我的CardLayout有4/5個面板,其中2個面板需要對焦。我寫了2個ComponentListeners來讓它工作。現在,我想看看「卡片佈局焦點」,以供我自己的啓發。謝謝。 –

0

它會更容易,告訴您是否把所有的代碼。基本上你需要確保你要請求焦點前,顯示幀。所以,如果你在一個框架初始化這些組件應該是

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

我正在做幀之前顯示。我正在使用卡片佈局。這是顯示的第二張牌。有什麼不同? –

+0

在嘗試設置焦點之前是否要實現組件(pack())? – freefall

+0

我的應用程序中沒有包()。 –