2013-01-24 36 views
7

我有一個JPanel加載在JFrame上。 JPanel包含4個JButton。我試圖做的事情是自動獲取焦點在第一個jbutton上,這樣我就可以在鍵盤之間遍歷JButton。jpanel上的jButton自動對焦

我試過在jpanel的構造函數裏面的jButton1.requestFocusInWindow();代碼,但它仍然沒有工作。有什麼我失蹤了嗎?我還能做什麼?

編輯: 該項目包含3個java文件和他們的代碼如下:

NewJFrame.java

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package sampleui; 

import java.awt.Container; 
import java.awt.Toolkit; 
import javax.swing.JRootPane; 
import javax.swing.UIManager; 

/** 
* 
* @author Administrator 
*/ 
public class NewJFrame extends javax.swing.JFrame { 

static Container container; 

/** 
* Creates new form NewJFrame 
*/ 
public NewJFrame() { 
    initComponents(); 
    rootPane= getRootPane(); 
    container=getContentPane(); 
    setSize(Toolkit.getDefaultToolkit().getScreenSize()); 
    setVisible(true); 

} 

/** 
* This method is called from within the constructor to initialize the form. 
* WARNING: Do NOT modify this code. The content of this method is always 
* regenerated by the Form Editor. 
*/ 
@SuppressWarnings("unchecked") 
// <editor-fold defaultstate="collapsed" desc="Generated Code">       
private void initComponents() { 

    jMenuItem1 = new javax.swing.JMenuItem(); 
    jPanel1 = new javax.swing.JPanel(); 
    jLabel2 = new javax.swing.JLabel(); 
    jLabel5 = new javax.swing.JLabel(); 
    jLabel6 = new javax.swing.JLabel(); 
    jLabel1 = new javax.swing.JLabel(); 
    jLabel3 = new javax.swing.JLabel(); 
    jPanel2 = new javax.swing.JPanel(); 
    jLabel7 = new javax.swing.JLabel(); 
    jLabel8 = new javax.swing.JLabel(); 
    jLabel9 = new javax.swing.JLabel(); 
    jDesktopPane1 = new javax.swing.JDesktopPane(); 

    jMenuItem1.setText("jMenuItem1"); 

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
    setTitle("This is the Title"); 

    jPanel1.setBackground(new java.awt.Color(204, 204, 204)); 
    jPanel1.setLayout(new java.awt.BorderLayout()); 

    jLabel2.setForeground(new java.awt.Color(255, 255, 255)); 
    jPanel1.add(jLabel2, java.awt.BorderLayout.PAGE_START); 

    jLabel5.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N 
    jLabel5.setForeground(new java.awt.Color(51, 51, 51)); 
    jLabel5.setText("dfgdfgdfg"); 
    jPanel1.add(jLabel5, java.awt.BorderLayout.LINE_START); 

    jLabel6.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N 
    jLabel6.setText("dfgdfgdfg"); 
    jPanel1.add(jLabel6, java.awt.BorderLayout.LINE_END); 

    jLabel1.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N 
    jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
    jLabel1.setText("dfgdfgfdgfdgfdg"); 
    jPanel1.add(jLabel1, java.awt.BorderLayout.CENTER); 

    jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
    jLabel3.setText("jLabel3"); 
    jPanel1.add(jLabel3, java.awt.BorderLayout.PAGE_END); 

    getContentPane().add(jPanel1, java.awt.BorderLayout.PAGE_START); 

    jPanel2.setBackground(new java.awt.Color(204, 204, 204)); 
    jPanel2.setLayout(new java.awt.BorderLayout()); 

    jLabel7.setText("jLabel7"); 
    jPanel2.add(jLabel7, java.awt.BorderLayout.LINE_START); 

    jLabel8.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); 
    jLabel8.setText("jLabel8"); 
    jPanel2.add(jLabel8, java.awt.BorderLayout.LINE_END); 

    jLabel9.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
    jLabel9.setText("jLabel9"); 
    jPanel2.add(jLabel9, java.awt.BorderLayout.CENTER); 

    getContentPane().add(jPanel2, java.awt.BorderLayout.PAGE_END); 

    jDesktopPane1.addMouseListener(new java.awt.event.MouseAdapter() { 
     public void mouseClicked(java.awt.event.MouseEvent evt) { 
      jDesktopPane1MouseClicked(evt); 
     } 
    }); 
    getContentPane().add(jDesktopPane1, java.awt.BorderLayout.CENTER); 

    pack(); 
}// </editor-fold>       

private void jDesktopPane1MouseClicked(java.awt.event.MouseEvent evt) {           
    // TODO add your handling code here: 

    container=getContentPane(); 
    setSize(Toolkit.getDefaultToolkit().getScreenSize()); 
    setVisible(true); 

    //callCompanyOption(); 

    container.setVisible(false); 
    jDesktopPane1.setVisible(false); 
    NewJPanel p=new NewJPanel(); 
    //p.setBounds(40, 30, 1200, 786); 
    container.add(p); 
    container.setVisible(true); 

}           


/** 
* @param args the command line arguments 
*/ 
public static void main(String args[]) { 
    /* Set the Nimbus look and feel */ 
    //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> 
    /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. 
    * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
    */ 
    try { 
     for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
      if ("Nimbus".equals(info.getName())) { 
       javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
       break; 
      } 
     } 
    } catch (ClassNotFoundException ex) { 
     java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (InstantiationException ex) { 
     java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (IllegalAccessException ex) { 
     java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
     java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } 
    //</editor-fold> 

    /* Create and display the form */ 
    java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      new NewJFrame().setVisible(true); 
     } 
    }); 
} 



// Variables declaration - do not modify      
private javax.swing.JDesktopPane jDesktopPane1; 
private javax.swing.JLabel jLabel1; 
private javax.swing.JLabel jLabel2; 
private javax.swing.JLabel jLabel3; 
private javax.swing.JLabel jLabel5; 
private javax.swing.JLabel jLabel6; 
private javax.swing.JLabel jLabel7; 
private javax.swing.JLabel jLabel8; 
private javax.swing.JLabel jLabel9; 
private javax.swing.JMenuItem jMenuItem1; 
private javax.swing.JPanel jPanel1; 
private javax.swing.JPanel jPanel2; 
// End of variables declaration     
} 

NewJPanel.java

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package sampleui; 

import java.awt.Component; 
import java.awt.Container; 
import java.awt.event.KeyEvent; 

/** 
* 
* @author Administrator 
*/ 
public class NewJPanel extends javax.swing.JPanel { 


/** 
* Creates new form NewJPanel 
*/ 
public NewJPanel() { 
    initComponents(); 

} 

/** 
* This method is called from within the constructor to initialize the form. 
* WARNING: Do NOT modify this code. The content of this method is always 
* regenerated by the Form Editor. 
*/ 
@SuppressWarnings("unchecked") 
// <editor-fold defaultstate="collapsed" desc="Generated Code"> 
private void initComponents() { 

    jPanel2 = new javax.swing.JPanel(); 
    jPanel1 = new javax.swing.JPanel(); 
    jButton2 = new javax.swing.JButton(); 
    jXMonthView1 = new org.jdesktop.swingx.calendar.JXMonthView(); 

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

    javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); 
    jPanel2.setLayout(jPanel2Layout); 
    jPanel2Layout.setHorizontalGroup(
     jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGap(0, 0, Short.MAX_VALUE) 
    ); 
    jPanel2Layout.setVerticalGroup(
     jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGap(0, 0, Short.MAX_VALUE) 
    ); 

    add(jPanel2, new java.awt.GridBagConstraints()); 

    jButton2.setText("OK"); 
    jButton2.setNextFocusableComponent(jButton2); 
    jButton2.addMouseListener(new java.awt.event.MouseAdapter() { 
     public void mouseClicked(java.awt.event.MouseEvent evt) { 
      jButton2MouseClicked(evt); 
     } 
    }); 
    jButton2.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      jButton2ActionPerformed(evt); 
     } 
    }); 
    jButton2.addKeyListener(new java.awt.event.KeyAdapter() { 
     public void keyPressed(java.awt.event.KeyEvent evt) { 
      jButton2KeyPressed(evt); 
     } 
    }); 

    jXMonthView1.addKeyListener(new java.awt.event.KeyAdapter() { 
     public void keyPressed(java.awt.event.KeyEvent evt) { 
      jXMonthView1KeyPressed(evt); 
     } 
    }); 

    javax.swing.GroupLayout jXMonthView1Layout = new javax.swing.GroupLayout(jXMonthView1); 
    jXMonthView1.setLayout(jXMonthView1Layout); 
    jXMonthView1Layout.setHorizontalGroup(
     jXMonthView1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGap(0, 0, Short.MAX_VALUE) 
    ); 
    jXMonthView1Layout.setVerticalGroup(
     jXMonthView1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGap(0, 160, Short.MAX_VALUE) 
    ); 

    javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); 
    jPanel1.setLayout(jPanel1Layout); 
    jPanel1Layout.setHorizontalGroup(
     jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(jPanel1Layout.createSequentialGroup() 
      .addGap(64, 64, 64) 
      .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) 
       .addComponent(jButton2, javax.swing.GroupLayout.DEFAULT_SIZE, 217, Short.MAX_VALUE) 
       .addComponent(jXMonthView1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
      .addContainerGap(56, Short.MAX_VALUE)) 
    ); 
    jPanel1Layout.setVerticalGroup(
     jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(jPanel1Layout.createSequentialGroup() 
      .addGap(19, 19, 19) 
      .addComponent(jXMonthView1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
      .addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addContainerGap()) 
    ); 

    add(jPanel1, new java.awt.GridBagConstraints()); 
}// </editor-fold> 

private void jButton2MouseClicked(java.awt.event.MouseEvent evt) {          

      jPanel1.setVisible(false); 
      NewJFrame.container.remove(NewJPanel.this); 
      NewJPanel1 p=new NewJPanel1(); 
      NewJFrame.container.add(p); 


}          

private void jButton2KeyPressed(java.awt.event.KeyEvent evt) {          
    // TODO add your handling code here: 
    int key=evt.getKeyCode(); 
    if(key==KeyEvent.VK_ENTER) 
    { 
     System.out.println("Enter Pressed"); 
     jPanel1.setVisible(false); 
     NewJFrame.container.remove(NewJPanel.this); 
     NewJPanel1 p=new NewJPanel1(); 
     NewJFrame.container.add(p); 
    } 
}         

private void jXMonthView1KeyPressed(java.awt.event.KeyEvent evt) {           
    // TODO add your handling code here: 
    jButton2.requestFocus(); 
}          

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { 
    // TODO add your handling code here: 
    jPanel1.setVisible(false); 
     NewJFrame.container.remove(NewJPanel.this); 
     NewJPanel1 p=new NewJPanel1(); 
     NewJFrame.container.add(p); 
} 


// Variables declaration - do not modify 
private javax.swing.JButton jButton2; 
private javax.swing.JPanel jPanel1; 
private javax.swing.JPanel jPanel2; 
private org.jdesktop.swingx.calendar.JXMonthView jXMonthView1; 
// End of variables declaration 
} 

NewJPanel1.java

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package sampleui; 

import java.awt.Window; 
import java.awt.event.KeyEvent; 
import javax.swing.JRootPane; 

/** 
* 
* @author Administrator 
*/ 
public class NewJPanel1 extends javax.swing.JPanel { 


//=new NewJFrame(); 
/** 
* Creates new form NewJPanel1 
*/ 
public NewJPanel1() { 
    initComponents(); 



} 

/** 
* This method is called from within the constructor to initialize the form. 
* WARNING: Do NOT modify this code. The content of this method is always 
* regenerated by the Form Editor. 
*/ 
@SuppressWarnings("unchecked") 
// <editor-fold defaultstate="collapsed" desc="Generated Code"> 
private void initComponents() { 

    jPanel1 = new javax.swing.JPanel(); 
    jButton1 = new javax.swing.JButton(); 
    jButton2 = new javax.swing.JButton(); 
    jButton3 = new javax.swing.JButton(); 
    jButton4 = new javax.swing.JButton(); 
    jButton5 = new javax.swing.JButton(); 

    setRequestFocusEnabled(false); 
    addKeyListener(new java.awt.event.KeyAdapter() { 
     public void keyPressed(java.awt.event.KeyEvent evt) { 
      formKeyPressed(evt); 
     } 
    }); 
    setLayout(new java.awt.GridBagLayout()); 

    jPanel1.setNextFocusableComponent(jButton5); 
    jPanel1.addKeyListener(new java.awt.event.KeyAdapter() { 
     public void keyPressed(java.awt.event.KeyEvent evt) { 
      jPanel1KeyPressed(evt); 
     } 
     public void keyReleased(java.awt.event.KeyEvent evt) { 
      jPanel1KeyReleased(evt); 
     } 
    }); 

    jButton1.setText("back"); 
    jButton1.addMouseListener(new java.awt.event.MouseAdapter() { 
     public void mouseClicked(java.awt.event.MouseEvent evt) { 
      jButton1MouseClicked(evt); 
     } 
     public void mouseEntered(java.awt.event.MouseEvent evt) { 
      jButton1MouseEntered(evt); 
     } 
    }); 
    jButton1.addKeyListener(new java.awt.event.KeyAdapter() { 
     public void keyPressed(java.awt.event.KeyEvent evt) { 
      jButton1KeyPressed(evt); 
     } 
    }); 

    jButton2.setText("jButton2"); 
    jButton2.addKeyListener(new java.awt.event.KeyAdapter() { 
     public void keyPressed(java.awt.event.KeyEvent evt) { 
      jButton2KeyPressed(evt); 
     } 
    }); 

    jButton3.setText("jButton3"); 
    jButton3.addKeyListener(new java.awt.event.KeyAdapter() { 
     public void keyPressed(java.awt.event.KeyEvent evt) { 
      jButton3KeyPressed(evt); 
     } 
    }); 

    jButton4.setText("jButton4"); 
    jButton4.addKeyListener(new java.awt.event.KeyAdapter() { 
     public void keyPressed(java.awt.event.KeyEvent evt) { 
      jButton4KeyPressed(evt); 
     } 
    }); 

    jButton5.setText("jButton5"); 
    jButton5.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); 
    jButton5.setFocusCycleRoot(true); 
    jButton5.setFocusTraversalPolicyProvider(true); 
    jButton5.setInheritsPopupMenu(true); 
    jButton5.setNextFocusableComponent(jButton4); 
    jButton5.setVerifyInputWhenFocusTarget(false); 
    jButton5.requestFocusInWindow(); 
    jButton5.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      jButton5ActionPerformed(evt); 
     } 
    }); 
    jButton5.addKeyListener(new java.awt.event.KeyAdapter() { 
     public void keyPressed(java.awt.event.KeyEvent evt) { 
      jButton5KeyPressed(evt); 
     } 
    }); 

    javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); 
    jPanel1.setLayout(jPanel1Layout); 
    jPanel1Layout.setHorizontalGroup(
     jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() 
      .addContainerGap(41, Short.MAX_VALUE) 
      .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) 
       .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
       .addComponent(jButton2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
       .addComponent(jButton3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
       .addComponent(jButton4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
       .addComponent(jButton5, javax.swing.GroupLayout.PREFERRED_SIZE, 126, javax.swing.GroupLayout.PREFERRED_SIZE)) 
      .addGap(38, 38, 38)) 
    ); 
    jPanel1Layout.setVerticalGroup(
     jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(jPanel1Layout.createSequentialGroup() 
      .addContainerGap() 
      .addComponent(jButton5) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
      .addComponent(jButton4) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
      .addComponent(jButton3) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
      .addComponent(jButton2) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
      .addComponent(jButton1) 
      .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
    ); 

    jButton5.getAccessibleContext().setAccessibleParent(this); 

    add(jPanel1, new java.awt.GridBagConstraints()); 
    //jButton1.requestFocusInWindow(); 
    //NewJFrame.getRootPane().setDefaultButton(jButton1); 
    //jButton1.requestFocus(); 
}// </editor-fold> 





private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {          
    // TODO add your handling code here: 
    jPanel1.setVisible(false); 
    NewJFrame.container.remove(NewJPanel1.this); 
    NewJPanel p=new NewJPanel(); 
    NewJFrame.container.add(p); 
}          

private void jPanel1KeyPressed(java.awt.event.KeyEvent evt) {         
    // TODO add your handling code here: 

    System.out.println("Key Pressed"); 

}         

private void jButton5KeyPressed(java.awt.event.KeyEvent evt) {          
    // TODO add your handling code here: 
    int key=evt.getKeyCode(); 
    if(key==KeyEvent.VK_ESCAPE) 
    { 
     System.out.println("Escape Pressed"); 
     jPanel1.setVisible(false); 
      NewJFrame.container.remove(NewJPanel1.this); 
      NewJPanel p=new NewJPanel(); 
      NewJFrame.container.add(p); 
    } 
}         

private void jButton4KeyPressed(java.awt.event.KeyEvent evt) {          
    // TODO add your handling code here: 
    int key=evt.getKeyCode(); 
    if(key==KeyEvent.VK_ESCAPE) 
    { 
     System.out.println("Escape Pressed"); 
     jPanel1.setVisible(false); 
      NewJFrame.container.remove(NewJPanel1.this); 
      NewJPanel p=new NewJPanel(); 
      NewJFrame.container.add(p); 
    } 
}         

private void jButton3KeyPressed(java.awt.event.KeyEvent evt) {          
    // TODO add your handling code here: 
    int key=evt.getKeyCode(); 
    if(key==KeyEvent.VK_ESCAPE) 
    { 
     System.out.println("Escape Pressed"); 
     jPanel1.setVisible(false); 
      NewJFrame.container.remove(NewJPanel1.this); 
      NewJPanel p=new NewJPanel(); 
      NewJFrame.container.add(p); 
    } 
}         

private void jButton2KeyPressed(java.awt.event.KeyEvent evt) {          
    // TODO add your handling code here: 
    int key=evt.getKeyCode(); 
    if(key==KeyEvent.VK_ESCAPE) 
    { 
     System.out.println("Escape Pressed"); 
     jPanel1.setVisible(false); 
      NewJFrame.container.remove(NewJPanel1.this); 
      NewJPanel p=new NewJPanel(); 
      NewJFrame.container.add(p); 
    } 
}         

private void jButton1KeyPressed(java.awt.event.KeyEvent evt) {          
    // TODO add your handling code here: 
    int key=evt.getKeyCode(); 
    if(key==KeyEvent.VK_ESCAPE||key==KeyEvent.VK_ENTER) 
    { 
      jPanel1.setVisible(false); 
      NewJFrame.container.remove(NewJPanel1.this); 
      NewJPanel p=new NewJPanel(); 
      NewJFrame.container.add(p); 
    } 
}         

private void jButton1MouseEntered(java.awt.event.MouseEvent evt) {          
    // TODO add your handling code here: 

}          

private void formKeyPressed(java.awt.event.KeyEvent evt) {         
    // TODO add your handling code here: 
    System.out.println("key pressed"); 
}        

private void jPanel1KeyReleased(java.awt.event.KeyEvent evt) {          
    // TODO add your handling code here: 
}         

private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {           
    // TODO add your handling code here: 
}           


// Variables declaration - do not modify 
private javax.swing.JButton jButton1; 
private javax.swing.JButton jButton2; 
private javax.swing.JButton jButton3; 
private javax.swing.JButton jButton4; 
private javax.swing.JButton jButton5; 
public static javax.swing.JPanel jPanel1; 
// End of variables declaration 

}

使按鈕對焦的原因是用箭頭鍵或鍵盤在按鈕之間移動。

+0

感謝編輯Flash –

+0

'org.jdesktop.swingx.calendar.JXMonthView'不能得到解決。 –

+0

你需要添加swingX庫 –

回答

5

的方法

jButton1.requestFocus(); 

應該只是罰款。但是當你調用這個方法時,它是非常重要的。

該方法必須在顯示按鈕後調用。這意味着,不要在構造函數中調用requestFocus(),而應在面板已經可見時調用它。

下面是一些僞代碼:

public NewJFrame() { 
    initComponents(); 
    //some methods ommitted 
    setVisible(true); 

    //change to NewJPanel1 

    //request focus after displaying the NewJPanel1 
} 

編輯:這裏是一個具體的實現可能的解決辦法的。

NewPanel.java

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { 
    // TODO add your handling code here: 
    jPanel1.setVisible(false); 
    NewJFrame.container.remove(NewJPanel.this); 
    NewJPanel1 p=new NewJPanel1(); 
    NewJFrame.container.add(p); 

    p.initFocus(); 
} 

NewJPanel1.java

public void initFocus() { 
    jButton5.requestFocus(); 
} 
2

嘗試了這一點:

public NewJFrame() { 
    initComponents(); 
    rootPane= getRootPane(); 
    container=getContentPane(); 
    setSize(Toolkit.getDefaultToolkit().getScreenSize()); 
    setVisible(true); 

    //added code: 
    JButton jbutton5 = //get from NewJPanel1 
    getRootPane().setDefaultButton(jbutton5); 
    jbutton5.requestFocus(); 
} 

您需要在NewJPanel1創建一個方法傳遞到NewJFramejbutton5參考。

public JButton getDefaultButton() { 
    return jButton5; 
} 
+0

裏面的構造? –

+0

@NiteshVerma,如果不顯示任何相關代碼,我怎麼知道該把它放在哪裏。 –

+0

我試過了,但它創建了jframe的新實例,使我的應用程序無用 –

3

如果更改此:

public NewJPanel1() { 
    initComponents(); 
} 

這樣:

public NewJPanel1() { 
    initComponents(); 
    addComponentListener(new ComponentListener() { 

     @Override 
     public void componentResized(ComponentEvent ce) {} 

     @Override 
     public void componentMoved(ComponentEvent ce) {} 

     @Override 
     public void componentShown(ComponentEvent ce) { 
      jButton1.requestFocus(); 
     } 

     @Override 
     public void componentHidden(ComponentEvent ce) {} 
    }); 
} 

然後,它會工作,因爲它始終運行時,它是可見的。直到將它添加到NewJFrame中才可見。

2

要自動聚焦於JPanel一個JButton(或任何Component)其父組件(JFrame你的情況)時加載(上無論哪個位置,當它被添加到其parent component),你需要創建自己的panel這將延伸JPanel,您在其中添加component listener以從panel接收component events。最後,overridecomponentMovedcomponentShow方法java.awt.event.ComponentListenerinterface其中設置默認聚焦組件爲button你想要的(使用button.requestFocus())。 這是我爲Demo提供的代碼。我希望這將幫助你實現你正在尋找的結果是:

import java.awt.AWTKeyStroke; 
import java.awt.Container; 
import java.awt.GridLayout; 
import java.awt.BorderLayout; 
import java.awt.KeyboardFocusManager; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import java.awt.event.ComponentListener; 
import java.awt.event.ComponentEvent; 
import java.awt.event.KeyEvent; 
import java.util.Set; 
import java.util.HashSet; 
import javax.swing.JPanel; 
import javax.swing.JFrame; 
import javax.swing.JButton; 
import javax.swing.JOptionPane; 
import javax.swing.KeyStroke; 
import javax.swing.SwingUtilities; 

public class FocusFrame extends JFrame 
{ 
    JButton lowerButton; 
    JButton upperButton; 
    JPanel centerPanel; 

    public void prepareAndShowGUI() 
    { 
     centerPanel = new FocusPanel(); 
     lowerButton = new JButton("Lower Button"); 
     upperButton = new JButton("Click here to hide/show center Panel"); 
     Container container = getContentPane(); 
     container.add(centerPanel,BorderLayout.CENTER); 
     container.add(lowerButton,BorderLayout.SOUTH); 
     container.add(upperButton,BorderLayout.NORTH); 
     upperButton.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent evt) 
      { 
       centerPanel.setVisible(!centerPanel.isVisible()); 
      } 
     }); 
     pack(); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setVisible(true); 
    } 
    public static void main(String[] st) 
    { 
     SwingUtilities.invokeLater(new Runnable() 
     { 
      @Override 
      public void run() 
      { 
       FocusFrame fFrame = new FocusFrame(); 
       fFrame.prepareAndShowGUI(); 
      } 
     }); 
    } 
} 

class FocusPanel extends JPanel implements ComponentListener 
{ 
    int SIZE = 10; 
    JButton[] buttons; 
    public FocusPanel() 
    { 
     createAndAttachGUI(); 
    } 
    private void createAndAttachGUI() 
    { 
     buttons = new JButton[SIZE]; 
     setLayout(new GridLayout(5,5)); 
     for (int i = 0 ; i < SIZE ; i++) 
     { 
      buttons[i] = new JButton("Button " + (i+1)); 
      buttons[i].setFocusTraversalKeysEnabled(true); 
      add(buttons[i]); 
     } 
     //For Forward Focus Traversal 
     Set<AWTKeyStroke> set = new HashSet<AWTKeyStroke>(this.getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS)); 
     set.add(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT,0)); 
     setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS,set); 
     //For Backward Focus Traversal 
     set = new HashSet<AWTKeyStroke>(this.getFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS)); 
     set.add(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT,0)); 
     setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS,set); 
     addComponentListener(this); 
    } 
    @Override 
    public void componentHidden(ComponentEvent e) 
    {} 
    @Override 
    public void componentMoved(ComponentEvent e) 
    { 
     buttons[0].requestFocus(); 
    } 
    @Override 
    public void componentResized(ComponentEvent e) 
    {} 
    @Override 
    public void componentShown(ComponentEvent e) 
    { 
     buttons[0].requestFocus(); 
    } 
} 
+0

@Downvoter:會不會提供downvote的理由? –