showMessageDialog 影响 KeyHandler
showMessageDialog influence KeyHandler
我的 KeyHandler 在这里:
private void KeyHandler(java.awt.event.KeyEvent evt) {
// TODO add your handling code here:
if(evt.getKeyCode() == KeyEvent.VK_UP)
{
if(menuPosition == 1){
MenuLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/labyrinth grafika/menu/menu_volba_3.png")));
menuPosition = 3;
}
else if(menuPosition == 2){
MenuLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/labyrinth grafika/menu/menu_volba_1.png")));
menuPosition = 1;
}
else if(menuPosition == 3){
MenuLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/labyrinth grafika/menu/menu_volba_2.png")));
menuPosition = 2;
}
}
if(evt.getKeyCode() == KeyEvent.VK_DOWN)
{
if(menuPosition == 1){
MenuLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/labyrinth grafika/menu/menu_volba_2.png")));
menuPosition = 2;
}
else if(menuPosition == 2){
MenuLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/labyrinth grafika/menu/menu_volba_3.png")));
menuPosition = 3;
}
else if(menuPosition == 3){
MenuLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/labyrinth grafika/menu/menu_volba_1.png")));
menuPosition = 1;
}
}
if(evt.getKeyCode() == KeyEvent.VK_ENTER)
{
if(menuPosition == 1){
menuPosition = 5;
Container parent = MenuLabel.getParent();
parent.removeAll();
parent.add(NewGamePanel);
parent.repaint();
parent.revalidate();
}
else if(menuPosition == 2){
menuPosition = 4;
MenuLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/labyrinth grafika/menu/readme.png")));
}
else if(menuPosition == 3){
System.exit(0);
}
else if(menuPosition == 4){
MenuLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/labyrinth grafika/menu/menu_volba_1.png")));
menuPosition = 1;
}
}
}
还有我的按钮:
private void backButtonActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
jPanel1.removeAll();
jPanel1.add(MenuLabel);
jPanel1.repaint();
jPanel1.revalidate();
menuPosition = 1;
}
当JPanel1 是我程序的Panel 时。我在那里有 CardLayout,单击此按钮时我想关闭所有内容,然后返回到我的 MenuLabel。
在Java生成的initComponents中有这段代码:
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
MenuLabel = new javax.swing.JLabel();
NewGamePanel = new javax.swing.JPanel();
NewGameHeader = new javax.swing.JLabel();
NewGameBody = new javax.swing.JPanel();
sizeOfField = new javax.swing.JComboBox();
sizeOfFieldLabel = new javax.swing.JLabel();
NewGameOkButton = new javax.swing.JButton();
jLabel1 = new javax.swing.JLabel();
numberOfPlayersCombo = new javax.swing.JComboBox();
backButton = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("Labyrinth - The Game");
setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
setMinimumSize(new java.awt.Dimension(1000, 650));
setPreferredSize(new java.awt.Dimension(650, 700));
setResizable(false);
setSize(new java.awt.Dimension(650, 700));
addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
KeyHandler(evt);
}
});
...
有趣的是,单击按钮后我的 KeyHandler 不工作,但是当我将这个简单的代码放入 backButtonActionPerformed 函数时:
JOptionPane.showMessageDialog(null, null);
keyHandler 再次工作。谁能告诉我为什么会这样,我怎样才能让 KeyHandler 在不弹出消息对话框的情况下再次工作?
其余代码由Java生成(其他一些盒子等)
谢谢。
不要使用 KeyListener
s,它们注册到的组件需要有键盘焦点并且是可聚焦的
相反,请使用专为克服这些限制而设计的键绑定 API
在你的函数中 backButtonActionPerformed(java.awt.event.ActionEvent evt)
尝试添加一行
jPanel1.requestFocusInWindow();
行 menuPosition = 1;
之前并尝试 运行 程序。
我的 KeyHandler 在这里:
private void KeyHandler(java.awt.event.KeyEvent evt) {
// TODO add your handling code here:
if(evt.getKeyCode() == KeyEvent.VK_UP)
{
if(menuPosition == 1){
MenuLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/labyrinth grafika/menu/menu_volba_3.png")));
menuPosition = 3;
}
else if(menuPosition == 2){
MenuLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/labyrinth grafika/menu/menu_volba_1.png")));
menuPosition = 1;
}
else if(menuPosition == 3){
MenuLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/labyrinth grafika/menu/menu_volba_2.png")));
menuPosition = 2;
}
}
if(evt.getKeyCode() == KeyEvent.VK_DOWN)
{
if(menuPosition == 1){
MenuLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/labyrinth grafika/menu/menu_volba_2.png")));
menuPosition = 2;
}
else if(menuPosition == 2){
MenuLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/labyrinth grafika/menu/menu_volba_3.png")));
menuPosition = 3;
}
else if(menuPosition == 3){
MenuLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/labyrinth grafika/menu/menu_volba_1.png")));
menuPosition = 1;
}
}
if(evt.getKeyCode() == KeyEvent.VK_ENTER)
{
if(menuPosition == 1){
menuPosition = 5;
Container parent = MenuLabel.getParent();
parent.removeAll();
parent.add(NewGamePanel);
parent.repaint();
parent.revalidate();
}
else if(menuPosition == 2){
menuPosition = 4;
MenuLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/labyrinth grafika/menu/readme.png")));
}
else if(menuPosition == 3){
System.exit(0);
}
else if(menuPosition == 4){
MenuLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/labyrinth grafika/menu/menu_volba_1.png")));
menuPosition = 1;
}
}
}
还有我的按钮:
private void backButtonActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
jPanel1.removeAll();
jPanel1.add(MenuLabel);
jPanel1.repaint();
jPanel1.revalidate();
menuPosition = 1;
}
当JPanel1 是我程序的Panel 时。我在那里有 CardLayout,单击此按钮时我想关闭所有内容,然后返回到我的 MenuLabel。
在Java生成的initComponents中有这段代码:
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
MenuLabel = new javax.swing.JLabel();
NewGamePanel = new javax.swing.JPanel();
NewGameHeader = new javax.swing.JLabel();
NewGameBody = new javax.swing.JPanel();
sizeOfField = new javax.swing.JComboBox();
sizeOfFieldLabel = new javax.swing.JLabel();
NewGameOkButton = new javax.swing.JButton();
jLabel1 = new javax.swing.JLabel();
numberOfPlayersCombo = new javax.swing.JComboBox();
backButton = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("Labyrinth - The Game");
setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
setMinimumSize(new java.awt.Dimension(1000, 650));
setPreferredSize(new java.awt.Dimension(650, 700));
setResizable(false);
setSize(new java.awt.Dimension(650, 700));
addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
KeyHandler(evt);
}
});
...
有趣的是,单击按钮后我的 KeyHandler 不工作,但是当我将这个简单的代码放入 backButtonActionPerformed 函数时:
JOptionPane.showMessageDialog(null, null);
keyHandler 再次工作。谁能告诉我为什么会这样,我怎样才能让 KeyHandler 在不弹出消息对话框的情况下再次工作?
其余代码由Java生成(其他一些盒子等)
谢谢。
不要使用 KeyListener
s,它们注册到的组件需要有键盘焦点并且是可聚焦的
相反,请使用专为克服这些限制而设计的键绑定 API
在你的函数中 backButtonActionPerformed(java.awt.event.ActionEvent evt)
尝试添加一行
jPanel1.requestFocusInWindow();
行 menuPosition = 1;
之前并尝试 运行 程序。