mit keylistener frame schliessen

silson

Aktives Mitglied
hallo ich würde gerne mit der taste "space" gerne mein programm schliessen...und ich habe keine ahnung... könnte mir einer weiterhelfen...hier ist das programm
besten dank im vorraus

Java:
package gggg;

import java.awt.Color;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;

public class sdfgh {
  
    public sdfgh(){      
    }
  
    class KeyHaendler implements KeyListener{      
        int spacetaste;

        @Override
        public void keyPressed(KeyEvent e) {          
            spacetaste = e.getKeyCode();
        }

        @Override
        public void keyReleased(KeyEvent e) {
            if(spacetaste == KeyEvent.VK_SPACE){
                System.exit(0);
            }          
        }

        @Override
        public void keyTyped(KeyEvent e) {
            // TODO Auto-generated method stub          
        }      
    }

public static void main(String[] args) {      
        JFrame main = new JFrame();
        main.setTitle("MAIN");
        main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        main.setResizable(false);
        main.setSize(500, 500);
        main.getContentPane().setLayout(null);
        main.setLocationRelativeTo(null);
        main.setVisible(true);
        main.getContentPane().setBackground(new Color(20, 50, 90));
    }
}
 
klasse rausgenommen und das mit dem objekt weisss ich nicht...

Code:
package gggg;

import java.awt.Color;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;

public class sdfgh {
   

   
    class KeyHaendler implements KeyListener{
       
        int spacetaste;

        @Override
        public void keyPressed(KeyEvent e) {
           
            spacetaste = e.getKeyCode();
        }

        @Override
        public void keyReleased(KeyEvent e) {
            if(spacetaste == KeyEvent.VK_SPACE){
                System.exit(0);
            }
           
        }

        @Override
        public void keyTyped(KeyEvent e) {
            // TODO Auto-generated method stub
           
        }
       
    }

public static void main(String[] args) {
       
        JFrame main = new JFrame();
        main.setTitle("MAIN");
        main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        main.setResizable(false);
        main.setSize(500, 500);
        main.getContentPane().setLayout(null);
        main.setLocationRelativeTo(null);
        main.setVisible(true);
        main.getContentPane().setBackground(new Color(20, 50, 90));
    }
}
 
also wenn ich einen button erstelle geht es und wenn ich ein bild erstelle geht es nicht.
was ist der unterschied?
hier die 2 codes
Code:
package gggg;

import java.awt.Color;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class sdfgh extends JFrame{
  
    KeyHaendler exit = new KeyHaendler();
  
    JLabel bild1;
    Icon rahmen;

  
  
  
    public sdfgh(){
      
        rahmen = new ImageIcon(getClass().getResource("bilder/rahmen runde.jpg"));
        bild1 = new JLabel(rahmen);
        bild1.setBounds(19, 59, 462, 362);
        bild1.addKeyListener(exit);
        add(bild1);
    }
  
  
  
  
    class KeyHaendler implements KeyListener{
      
        int spacetaste;

        @Override
        public void keyPressed(KeyEvent e) {
          
            spacetaste = e.getKeyCode();
        }

        @Override
        public void keyReleased(KeyEvent e) {
          
            if(spacetaste == KeyEvent.VK_SPACE){
                System.exit(0);
            }
        }

        @Override
        public void keyTyped(KeyEvent e) {
            // TODO Auto-generated method stub
          
        }
    }

  
  
  
public static void main(String[] args) {
      
        JFrame main = new sdfgh();
        main.setTitle("MAIN");
        main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        main.setResizable(false);
        main.setSize(500, 500);
        main.getContentPane().setLayout(null);
        main.setLocationRelativeTo(null);
        main.setVisible(true);
        main.getContentPane().setBackground(new Color(20, 50, 90));
    }
}

Code:
package gggg;

import java.awt.Color;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class sdfgh extends JFrame{
   
    KeyHaendler exit = new KeyHaendler();
   
    JButton buttonExit;

   
   
   
    public sdfgh(){
       
        Icon a = new ImageIcon(getClass().getResource("bilder/text exit blau.jpg"));
        Icon b = new ImageIcon(getClass().getResource("bilder/text exit rot.jpg"));
        buttonExit = new JButton("", a);
        buttonExit.setRolloverIcon(b);
        buttonExit.setBounds(230, 120, 38, 244);
        buttonExit.setBorder(null);
        buttonExit.addKeyListener(exit);
        add(buttonExit);
    }
   
   
   
   
    class KeyHaendler implements KeyListener{
       
        int spacetaste;

        @Override
        public void keyPressed(KeyEvent e) {
           
            spacetaste = e.getKeyCode();
        }

        @Override
        public void keyReleased(KeyEvent e) {
           
            if(spacetaste == KeyEvent.VK_SPACE){
                System.exit(0);
            }
        }

        @Override
        public void keyTyped(KeyEvent e) {
            // TODO Auto-generated method stub
           
        }
    }

   
   
   
public static void main(String[] args) {
       
        JFrame main = new sdfgh();
        main.setTitle("MAIN");
        main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        main.setResizable(false);
        main.setSize(500, 500);
        main.getContentPane().setLayout(null);
        main.setLocationRelativeTo(null);
        main.setVisible(true);
        main.getContentPane().setBackground(new Color(20, 50, 90));
    }
}
 
Ich verstehe nicht warum du den KeyListener nicht einfach zu deinem JFrame hinzufügst.

Das es nicht geht liegt sicherlich daran, dass dein Label kein focus hat. Soweit ich weiß reagiert den KeyListener immer nur dann, wenn das Objekt auch den Focus hat.

Stichwort:
Java:
 label.setFocusable(true);

und

Java:
 label.requestFocus();

Gruß
Robert
 

Zurück
Oben