Autofocus on jButton on jpanel

I have a JPanel loaded in a JFrame . JPanel contains 4 JButtons. What I'm trying to do is automatically adjust the focus on the 1st button so that I can navigate between JButtons using the keyboard.

I tried the code jButton1.requestFocusInWindow(); inside the jpanel constructor, but still it didn't work. Is there something I'm missing? What else can I do?

Edit: The project contains 3 java files and their code is as follows:

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 

}

The reason that the focus button is capable is to move between the arrow buttons or the keyboard.

+7
source share
4 answers

Method

 jButton1.requestFocus(); 

should work fine. But this is important when you call this method.

The method should be called after the button has been displayed. This means that do not call requestFocus() in the constructor, but call it when the panel is already visible.

Here are a few pseudo codes:

 public NewJFrame() { initComponents(); //some methods ommitted setVisible(true); //change to NewJPanel1 //request focus after displaying the NewJPanel1 } 

EDIT: Here is a concrete implementation of a possible solution.

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

If you change this:

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

Then it will work, because it always starts when it becomes visible. It does not appear until you add it to NewJFrame.

+3
source

Try the following:

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

You will need to create a method in NewJPanel1 to pass the link from jbutton5 to NewJFrame .

 public JButton getDefaultButton () { return jButton5; } 
+2
source

To autofocus a JButton (or any Component ) on a JPanel when its parent component is loaded ( JFrame in your case) (no matter where and when it is added to its parent component ) you need to create your own panel that will expand JPanel , where you add component listener to get component events from panel . And finally, the override methods componentMoved and componentShow java.awt.event.ComponentListener interface , where the default lumped component is like the button you want (using button.requestFocus() ). Here is the code I provided for demonstration. I hope this helps you achieve the result you are looking for:

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

All Articles