我正在尝试使用以下类作为一个简单的乒乓球游戏的球拍
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的位置时,您没有设置大小。正确的解决方案不是设置其大小,而是避免使用空布局。虽然在Swing新手看来,空布局和setBounds()
可能是创建复杂GUI的最简单、最好的方法,但创建的Swing GUI越多,在使用它们时就会遇到更严重的困难。当GUI调整大小时,它们不会调整组件的大小,它们是一个需要增强或维护的皇家女巫,当放在滚动窗格中时,它们会完全失败,当在所有平台上查看时,或者当屏幕分辨率与原始分辨率不同时,它们看起来非常糟糕。