我有一个JPanel
加载JFrame
。JPanel 包含 4 个 JButton。我想做的事情是自动将焦点放在第一个 jbutton 上,这样我就可以用键盘在 JButtons 之间遍历。
我jButton1.requestFocusInWindow();
在 jpanel 的构造函数中尝试了代码,但仍然没有用。有什么我想念的吗?我还能做什么?
编辑:项目包含3个java文件,它们的代码如下:
新JFrame.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
}
新JPanel.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
}
新JPanel1.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
}
使按钮能够聚焦的原因是用箭头键或键盘在按钮之间遍历。