8

JPanelロードされていJFrameます。JPanelには4つのJButtonが含まれています。私がやろうとしているのは、最初のjbuttonに自動的にフォーカスを合わせて、キーボードで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

}

ボタンのフォーカスを可能にする理由は、矢印キーまたはキーボードを使用してボタン間を移動することです。

4

4 に答える 4

8

方法

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();
}
于 2013-01-30T10:59:50.293 に答える
4

これを変更した場合:

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に追加するまで表示されません。

于 2013-02-04T09:52:14.220 に答える
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渡すためにメソッドを作成する必要があります。jbutton5NewJFrame

public JButton getDefaultButton () {
    return jButton5;
}
于 2013-01-24T11:14:30.070 に答える
2

親コンポーネント(あなたの場合)がロードされたときにJButton(または任意のComponent)をオートフォーカスするには(どの場所にいつ追加されたかに関係なく) 、受信するために追加する場所に拡張される独自のコンポーネントを作成する必要がありますから。そして最後に、 whereのandメソッドは、デフォルトのフォーカスされたコンポーネントを必要なものとして設定します(を使用)。これが私がデモ用に提供したコードです。これがあなたが探している結果を達成するのに役立つことを願っています:JPanelJFrameparent componentpanelJPanelcomponent listenercomponent eventspaneloverridecomponentMovedcomponentShowjava.awt.event.ComponentListener interfacebuttonbutton.requestFocus()

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();
    }
}
于 2013-02-05T18:28:25.693 に答える