JLabel没有在Frame中显示

时间:2016-05-08 00:58:26

标签: java swing jframe jlabel null-layout-manager

我尝试使用以下课程作为简单的针式游戏的球拍

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

1 个答案:

答案 0 :(得分:2)

这是你的问题:

window.setLayout(null);

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