首页 新闻 会员 周边 捐助

请教下 swing 在 cardlayout 中的 panel 或者控件不响应键盘事件

0
悬赏园豆:20 [待解决问题]

大家好,我的疑问是关于这个代码的,在 Frame 中添加了 Panel,然后设置为 cardlayout 布局,然后无论是用 first 这个 panle 还是用 first 中的 firstlbl 这空间侦听鼠标按键都没有反应,请教这是为什么呢,为什么没有响应按键事件呢

21:27:53 你已加入群,开始聊天吧
Q群管家  21:27:53
@xpro 欢迎公开讨论,勿私加好友骚扰他人。提问请一次性详尽描述所处情况。勿问“在不在,有没有人”,
——来自群管理员(2777184456)的编辑
xpro  21:28:19
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class HelloWorld
{
    public static void main(String[] args) {
        JFrame main = new JFrame();
        main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        main.setTitle("key puzzle");
        main.setBounds(100, 0, 400, 400);
        main.setVisible(true);

        JPanel top = new JPanel();
        Button file = new Button("file");
        top.add(file);



        CardLayout cl = new CardLayout();
        JPanel bottom = new JPanel(cl);

        JPanel first = new JPanel();
        JLabel frstLbl = new JLabel("first");

        frstLbl.setFocusable(true);
        frstLbl.addKeyListener(new KeyListener() {
            @Override
            public void keyTyped(KeyEvent e) {

            }

            @Override
            public void keyPressed(KeyEvent e) {

            }

            @Override
            public void keyReleased(KeyEvent e) {
                if (e.getKeyCode() == 37)
                {
                    cl.show(bottom, "first");
                }
                else if (e.getKeyCode() == 39)
                {
                    cl.show(bottom, "snd");
                }
            }
        });

        JPanel snd = new JPanel();
        JLabel sndLbl = new JLabel("snd");
        snd.add(sndLbl);

        bottom.add(first, "first");
        bottom.add(snd, "snd");

        cl.show(bottom, "snd");

//        JSplitPane jsp = new JSplitPane(JSplitPane.VERTICAL_SPLIT, top, bottom);

        main.getContentPane().add(bottom);





    }
}
xpro  21:29:41
大家好,我的疑问是关于这个代码的,在 Frame 中添加了 Panel,然后设置为 cardlayout 布局,然后无论是用 first 这个 panle 还是用 first 中的 firstlbl 这空间侦听鼠标按键都没有反应,请教这是为什么呢,为什么没有响应按键事件呢
xpro  21:30:13
谢谢大家
xpro  21:30:40
可有偿,谢谢
hjl  21:34:59
你要对Frame进行监听才行啊
xpro  21:38:44
import javax.swing.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class Demo2
{
    public static void main(String[] args) {
        JFrame main = new JFrame();
        main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        main.setBounds(1000, 0, 400, 400);
        main.setVisible(true);

        JPanel panel = new JPanel();
        JLabel msg = new JLabel("hello world");
        msg.setFocusable(true);
        msg.addKeyListener(new KeyListener() {
            @Override
            public void keyTyped(KeyEvent e) {

            }

            @Override
            public void keyPressed(KeyEvent e) {

            }

            @Override
            public void keyReleased(KeyEvent e) {
                System.out.println("hello world msg");
            }
        });
        panel.add(msg);
        main.getContentPane().add(panel);
    }
}

但是下面这个就可以

import javax.swing.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class Demo2
{
    public static void main(String[] args) {
        JFrame main = new JFrame();
        main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        main.setBounds(1000, 0, 400, 400);
        main.setVisible(true);

        JPanel panel = new JPanel();
        JLabel msg = new JLabel("hello world");
        msg.setFocusable(true);
        msg.addKeyListener(new KeyListener() {
            @Override
            public void keyTyped(KeyEvent e) {

            }

            @Override
            public void keyPressed(KeyEvent e) {

            }

            @Override
            public void keyReleased(KeyEvent e) {
                System.out.println("hello world msg");
            }
        });
        panel.add(msg);
        main.getContentPane().add(panel);
    }
}

活着挺好的主页 活着挺好 | 初学一级 | 园豆:118
提问于:2022-04-07 21:40
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册