JLabel 未显示在框架中

JLabel not showing in Frame

我正在尝试使用以下 class 作为简单的乒乓球游戏的球拍

 public class Racket extends JLabel{
        int up, down;
        int x, y;

        public Racket(int up, int down, int x, int y){
            this.setBackground(Color.BLACK);
            this.setForeground(Color.BLACK);
            this.up = up;
            this.down = down;
            this.x = x;
            this.y = y;
            setLocation(x,y);
            setOpaque(true);
        }
    }   

当我通过

将Racket添加到主框架时
p1 = new Racket(KeyEvent.VK_W, KeyEvent.VK_S, 0, (windowSize.height/2)-10);
window.add(p1);

球拍没有出现,谁能指出问题所在?

容器只是一个没有布局管理器的简单 JFrame

window = new JFrame("Ping Pong");
window.setSize(500, 500);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setLayout(null);

这就是你的问题:

window.setLayout(null);

当您使用 null 布局时,您对整个布局负全部责任,包括所有添加组件的大小和位置,并且在您的代码中,当您设置 JLabel 的位置时,您不必设置大小。正确的解决方案不是设置它的大小,而是避免使用空布局。虽然空布局和 setBounds() 对于 Swing 新手来说似乎是创建复杂 GUI 的最简单和最好的方法,但您创建的 Swing GUI 越多,您在使用它们时 运行 就会遇到更严重的困难。它们不会在 GUI 调整大小时调整您的组件的大小,它们是皇家 来增强或维护的,当放置在滚动窗格中时它们会完全失败,当在所有平台或不同的屏幕分辨率上查看时它们看起来很糟糕从原来的。