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