0

I'm trying to display a Jpanel that is added into a Jframe,for making this is i created a variable that turns on or off when ENTER is pressed, I even tried to make a counter that counts times Enter is pressed but it stops working after one call, but if i remove the setVisible(); part the counter keeps being incremented. Please help.I leave the code here:

package test;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import game.Component;
public class Panel {
    public boolean chat=Listener.chat;
    public static void main(String[]args) {
        JFrame frame = new JFrame();
        frame.setTitle("Finestra di test per il gioco");
        frame.setResizable(false);
        frame.getContentPane().setBackground(Color.CYAN);
        Dimension di = new Dimension(500,30);   
        frame.setBounds(0, 0, 500, 500);
        frame.setResizable(false);
        JPanel chatLayer=new JPanel();
        chatLayer.setBounds(0, 0, 500, 500);
        chatLayer.setBackground(Color.GREEN);
        JTextField barra_chat=new JTextField();
        barra_chat.setPreferredSize(di);
        chatLayer.add(barra_chat);
        frame.add(chatLayer);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Listener li=new Listener(chatLayer);
        barra_chat.addKeyListener(li);
        frame.validate();
        frame.setVisible(true);
    }

}









package test;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JPanel;

import test.Component;

public class Listener implements KeyListener{
    int x=0;
    JPanel pan = new JPanel();
    public static boolean chat=true;
    
    public Listener(JPanel pan) {
        this.pan=pan;
    }

    
    @Override
    public void keyTyped(KeyEvent e) {
        
    }

    @Override
    public void keyPressed(KeyEvent e) {
        int key=e.getKeyCode();
        
        
    switch(key) {   
    
    case KeyEvent.VK_ENTER:
        if(!chat) {
            pan.setVisible(true);
            chat=true;
            System.out.println(chat);
            x+=1;
            System.out.println(x);
            
        }else {
            pan.setVisible(false);
            chat=false;
            System.out.println(chat);
            x+=1;
            System.out.println(x);
        }
        break;
        
    }
    
        
    }

    @Override
    public void keyReleased(KeyEvent e) {
        
    }

}
  • Does this answer your question? [How can I listen for key presses (within Java Swing) across all components?](https://stackoverflow.com/questions/5344823/how-can-i-listen-for-key-presses-within-java-swing-across-all-components) – Progman Apr 28 '22 at 19:45
  • *Enter is pressed but it stops working after one call,* - KeyEvents are only passed to the component with focus. Your component is losing focus so it no longer receives the key events. **Don't use a KeyListener**. Swing was designed to be used with [Key Bindings](https://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html). The binding can be configured to work even if the component doesn't have focus. – camickr Apr 29 '22 at 02:14

0 Answers0