2013-01-24 13 views
7

Ho un JPanel caricato su un JFrame. JPanel contiene 4 JButtons. La cosa che sto cercando di fare è di mettere automaticamente a fuoco il 1 ° pulsante in modo da poter passare tra i JButtons con la tastiera.Auto-focus su un jButton su un jpanel

Ho provato il codice jButton1.requestFocusInWindow(); all'interno del costruttore di jpanel ma ancora non ha funzionato. C'è qualcosa che mi manca? Cos'altro posso fare?

Edit: Il progetto contiene 3 file Java e il loro codice è il seguente:

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 

}

Il motivo per rendere il pulsante attivo è quello di passare tra i pulsanti con i tasti freccia o la tastiera.

+0

grazie per la redazione del flash –

+0

'org.jdesktop.swingx.calendar.JXMonthView' non può essere risolto. –

+0

È necessario aggiungere la libreria swingX –

risposta

5

Il metodo

jButton1.requestFocus(); 

dovrebbe funzionare bene. Ma è essenziale quando chiami questo metodo.

Il metodo deve essere chiamato dopo che il pulsante è stato visualizzato. Ciò significa che non chiamare lo requestFocus() nel costruttore, ma chiamarlo quando il pannello è già visibile.

Ecco alcuni pseudo codice:

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

    //change to NewJPanel1 

    //request focus after displaying the NewJPanel1 
} 

EDIT: Ecco una concreta attuazione di una possibile soluzione.

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

Prova questo fuori:

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(); 
} 

si avrebbe bisogno di creare un metodo in NewJPanel1 per passare riferimento jbutton5-NewJFrame.

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

all'interno del costruttore? –

+0

@NiteshVerma, come faccio a sapere dove metterlo, se non mostri alcun codice rilevante. –

+0

Ho provato il tuo ma crea una nuova istanza di jframe, rendendo la mia applicazione inutile –

3

Se si modifica questa:

public NewJPanel1() { 
    initComponents(); 
} 

a questo:

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) {} 
    }); 
} 

Quindi funzionerà perché è sempre eseguito quando è reso visibile.Non è visibile finché non lo aggiungi a NewJFrame.

2

Per auto-fuoco un JButton (o qualsiasi Component) su JPanel quando si carica la sua componente principale (JFrame nel tuo caso) (non importa in quale posizione e quando si è aggiunto alla sua parent component) è necessario creare il proprio panel che si estenderà JPanel dove si aggiunge component listener per ricevere component events da panel. E infine, override i metodi componentMoved e componentShow di java.awt.event.ComponentListenerinterface dove impostare il componente di messa a fuoco predefinito come button che si desidera (utilizzando button.requestFocus()). Ecco il codice che ho fornito per Demo. Spero che questo vi aiuterà a raggiungere il risultato che si sta cercando:

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: vorrebbe fornire un motivo per downvote? –