KeyListener перестал работать - Java

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, имеется такая проблема, что программа работает через раз. Раньше все работало, картинки при нажатии менялись, но когда я добавил slogn и a вообще какие-либо действия не происходят.
import javax.imageio.*;
import java.io.*;
import javax.swing.*;
 
import java.awt.*;
import java.awt.event.*;
public class keyboard {
        public static void main(String[] args) {       
                final JFrame okno = new JFrame();
                class TestActionListener implements ActionListener {
                public void actionPerformed(ActionEvent e) {
                                okno.dispose();    
                }
           }
                java.net.URL imgURL = keyboard.class.getResource("/GUI/icon.png");
                okno.setIconImage(new ImageIcon(imgURL).getImage());
                okno.setUndecorated(true);
                myPanel np = new myPanel();
                okno.add(np);
                okno.setSize(286, 159);
                okno.setLocationRelativeTo(null);
                okno.setVisible(true);
                okno.setAlwaysOnTop(true);
                JButton button = new JButton();
                button.setSize(50,50);
                button.setLocation(235,1);
                ImageIcon img3 = new ImageIcon(myPanel.class.getResource("/GUI/kn.png"));
        button.setIcon(img3);
        button.setOpaque(false);
        button.setFocusPainted(false);
        button.setBorderPainted(false);
        button.setContentAreaFilled(false);
        button.setFocusable(false);
                ActionListener actionListener = new TestActionListener();
        button.addActionListener(actionListener);
                np.add(button);
                okno.setFocusable(true);
                okno.setFocusableWindowState(true);
        }
}
class myPanel extends JPanel
{
        Image i1; Image i2; Image i3; Image i4; int slogn = 0;
        java.net.URL img1 = myPanel.class.getResource("/GUI/boss.png");
        java.net.URL im1 = myPanel.class.getResource("/GUI/keys/W.png");
        java.net.URL im2 = myPanel.class.getResource("/GUI/keys/S.png");
        java.net.URL im3 = myPanel.class.getResource("/GUI/keys/D.png");
        java.net.URL im4 = myPanel.class.getResource("/GUI/keys/A.png");
       
        java.net.URL im5 = myPanel.class.getResource("/GUI/keys_red/W.png");
        java.net.URL im6 = myPanel.class.getResource("/GUI/keys_red/S.png");
        java.net.URL im7 = myPanel.class.getResource("/GUI/keys_red/D.png");
        java.net.URL im8 = myPanel.class.getResource("/GUI/keys_red/A.png");
        java.net.URL im9 = myPanel.class.getResource("/GUI/kn.png");
 
        {
        try
    {
            i1 = ImageIO.read(im1);
    }
            catch(IOException exp) {}
       
        try
    {
            i2 = ImageIO.read(im2);
    }
            catch(IOException exp) {}
       
        try
    {
            i3 = ImageIO.read(im3);
    }
            catch(IOException exp) {}
       
        try
    {
            i4 = ImageIO.read(im4);
    }
            catch(IOException exp) {}
        }
 
        myKey keys = new myKey();
        public myPanel()
        {
                setLayout(null);
                setBackground(Color.PINK);
                addKeyListener(keys);
                setFocusable(true);
                        Timer nt = new Timer(1,new ActionListener(){
                                public void actionPerformed(ActionEvent e){            
                                        repaint();
                                }
                        });
                                nt.start();
                               
                        }
        class myKey implements KeyListener
        {
                public void keyPressed(KeyEvent e)
                {
                        int key_ = e.getKeyCode();
                        if(key_==87){
                                try
                                {
                                i1 = ImageIO.read(im5);
                                }
                                        catch(IOException exp1) {}
                                slogn+=1;
                        }
                        if(key_==83){
                                try
                                {
                                i2 = ImageIO.read(im6);
                                }
                                        catch(IOException exp1) {}
                        }
                        if(key_==68){
                                try
                                {
                                i3 = ImageIO.read(im7);
                                }
                                        catch(IOException exp1) {}
                        }
                        if(key_==65){
                                try
                                {
                                i4 = ImageIO.read(im8);
                                }
                                        catch(IOException exp1) {}
                        }
                }
                public void keyReleased(KeyEvent e){
                        int ke_ = e.getKeyCode();
                        if(ke_==87){
                                try
                                {
                                i1 = ImageIO.read(im1);
                                }
                                        catch(IOException exp1) {}
                        }
                        if(ke_==83){
                                try
                                {
                                i2 = ImageIO.read(im2);
                                }
                                        catch(IOException exp1) {}
                        }
                        if(ke_==68){
                                try
                                {
                                i3 = ImageIO.read(im3);
                                }
                                        catch(IOException exp1) {}
                        }
                        if(ke_==65){
                                try
                                {
                                i4 = ImageIO.read(im4);
                                }
                                        catch(IOException exp1) {}
                        }
                }
                public void keyTyped(KeyEvent e) {}
                }
        public void paintComponent(Graphics gr)
        {
                super.paintComponent(gr);
                Font f = new Font("TimesRoman", Font.BOLD, 10);
                gr.setFont(f);
                gr.setColor(Color.BLACK);
                gr.drawString("W нажата:", 1, 15);
                String a = Integer.toString(slogn);
                gr.drawString(a, 51, 15);
                gr.drawString("раз(а)", 65,15);
                gr.drawImage(i1,96,1, null);
                gr.drawImage(i2,96,80, null);
                gr.drawImage(i3,191,80, null);
                gr.drawImage(i4,1,80, null);
        }
}

Решение задачи: «KeyListener перестал работать»

textual
Листинг программы
import javax.imageio.*;
import java.io.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
 
public class keyboard{
    public static void main(String[] args) {
        final JFrame okno = new JFrame();
        class TestActionListener implements ActionListener {
            public void actionPerformed(ActionEvent e) {
                    okno.dispose();    
            }
       }
        java.net.URL imgURL = keyboard.class.getResource("/GUI/icon.png");
        okno.setIconImage(new ImageIcon(imgURL).getImage());
        okno.setUndecorated(true);
        myPanel np = new myPanel();
        okno.add(np);
        okno.setSize(297, 159);
        okno.setLocationRelativeTo(null);
        okno.setVisible(true);
        
        JButton close = new JButton();
        close.setSize(50,50);
        close.setLocation(246,1);
        ImageIcon img3 = new ImageIcon(myPanel.class.getResource("/GUI/kn.png"));
        close.setIcon(img3);
        close.setOpaque(false);
        close.setFocusPainted(false);
        close.setBorderPainted(false);
        close.setContentAreaFilled(false);
        close.setFocusable(false);
        ActionListener actionListener = new TestActionListener();
        close.addActionListener(actionListener);
        np.add(close);
        okno.setFocusable(true);
        okno.setFocusableWindowState(true);
    }
}
class myPanel extends JPanel
{
    Image i1; Image i2; Image i3; Image i4;
    int kol1 = 0;
    int kol2 = 0;
    int kol3 = 0;
    int kol4 = 0;
    java.net.URL im1 = myPanel.class.getResource("/GUI/keys/W.png");
    java.net.URL im2 = myPanel.class.getResource("/GUI/keys/S.png");
    java.net.URL im3 = myPanel.class.getResource("/GUI/keys/D.png");
    java.net.URL im4 = myPanel.class.getResource("/GUI/keys/A.png");
    
    java.net.URL im5 = myPanel.class.getResource("/GUI/keys_red/W.png");
    java.net.URL im6 = myPanel.class.getResource("/GUI/keys_red/S.png");
    java.net.URL im7 = myPanel.class.getResource("/GUI/keys_red/D.png");
    java.net.URL im8 = myPanel.class.getResource("/GUI/keys_red/A.png");
 
    {
    try
    {
            i1 = ImageIO.read(im1);
    }
            catch(IOException exp) {}
    
    try
    {
            i2 = ImageIO.read(im2);
    }
            catch(IOException exp) {}
    
    try
    {
            i3 = ImageIO.read(im3);
    }
            catch(IOException exp) {}
    
    try
    {
            i4 = ImageIO.read(im4);
    }
            catch(IOException exp) {}
    }
 
    myKey keys = new myKey();
    public myPanel()
    {
        requestFocus();
        setLayout(null);
        setBackground(Color.PINK);
        addKeyListener(keys);
        setFocusable(true);
            Timer nt = new Timer(1,new ActionListener(){
                public void actionPerformed(ActionEvent e){     
                    repaint();
                }
            });
                nt.start();
                
            }
    class myKey implements KeyListener
    {
        public void keyPressed(KeyEvent e)
        {
            int key_ = e.getKeyCode();
            if(key_==87){
                try
                {
                    i1 = ImageIO.read(im5);
                }
                    catch(IOException exp1) {}
                kol1+=1;
                if(kol1==100000)
                {
                    JOptionPane.showMessageDialog(null, "Достигнуто максимальное число нажатий", "Внимание:", JOptionPane.OK_OPTION);
                    kol1=0;
                    try
                    {
                        i1 = ImageIO.read(im1);
                    }
                        catch(IOException exp1) {}
                }
            }
            if(key_==83){
                try
                {
                    i2 = ImageIO.read(im6);
                }
                    catch(IOException exp1) {}
                kol2+=1;
                if(kol2==100000)
                {
                    JOptionPane.showMessageDialog(null, "Достигнуто максимальное число нажатий", "Внимание:", JOptionPane.OK_OPTION);
                    kol2=0;
                    try
                    {
                        i2 = ImageIO.read(im2);
                    }
                        catch(IOException exp1) {}
                }
            }
            if(key_==68){
                try
                {
                    i3 = ImageIO.read(im7);
                }
                    catch(IOException exp1) {}
                kol3+=1;
                if(kol3==100000)
                {
                    JOptionPane.showMessageDialog(null, "Достигнуто максимальное число нажатий", "Внимание:", JOptionPane.OK_OPTION);
                    kol3=0;
                    try
                    {
                        i3 = ImageIO.read(im3);
                    }
                        catch(IOException exp1) {}
                }
            }
            if(key_==65){
                try
                {
                    i4 = ImageIO.read(im8);
                }
                    catch(IOException exp1) {}
                kol4+=1;
                if(kol4==100000)
                {
                    JOptionPane.showMessageDialog(null, "Достигнуто максимальное число нажатий", "Внимание:", JOptionPane.OK_OPTION);
                    kol4=0;
                    try
                    {
                        i4 = ImageIO.read(im4);
                    }
                        catch(IOException exp1) {}
                }
            }
        }
        public void keyReleased(KeyEvent e){
            int ke_ = e.getKeyCode();
            if(ke_==87){
                try
                {
                    i1 = ImageIO.read(im1);
                }
                    catch(IOException exp1) {}
            }
            if(ke_==83){
                try
                {
                    i2 = ImageIO.read(im2);
                }
                    catch(IOException exp1) {}
            }
            if(ke_==68){
                try
                {
                    i3 = ImageIO.read(im3);
                }
                    catch(IOException exp1) {}
            }
            if(ke_==65){
                try
                {
                    i4 = ImageIO.read(im4);
                }
                    catch(IOException exp1) {}
            }
        }
        public void keyTyped(KeyEvent e) {}
    }
    public void paintComponent(Graphics gr)
    {
        super.paintComponent(gr);
        Font f = new Font("TimesRoman", Font.BOLD, 9);
        gr.setFont(f);
        gr.setColor(Color.WHITE);
        gr.fillRect(0, 0, 104, 65);
        gr.setColor(Color.BLACK);
        gr.drawRect(0, 0, 104, 65);
        
        gr.drawString("W нажата:", 3, 15);
        String a = Integer.toString(kol1);
        gr.drawString(a, 48, 15);
        gr.drawString("раз(а)", 77,15);
        
        gr.drawString("S нажата:", 3, 30);
        String b = Integer.toString(kol2);
        gr.drawString(b, 48, 30);
        gr.drawString("раз(а)", 77,30);
        
        gr.drawString("D нажата:", 3, 45);
        String c = Integer.toString(kol3);
        gr.drawString(c, 48, 45);
        gr.drawString("раз(а)", 77,45);
        
        gr.drawString("A нажата:", 3, 60);
        String d = Integer.toString(kol4);
        gr.drawString(d, 48, 60);
        gr.drawString("раз(а)", 77,60);
        
        gr.drawImage(i1,107,1, null);
        gr.drawImage(i2,107,80, null);
        gr.drawImage(i3,202,80, null);
        gr.drawImage(i4,12,80, null);
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.857 из 5