2016-05-08 134 views
1

我嘗試使用下面的類作爲一個球拍簡單pinpong遊戲的JLabel在框架

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

當我通過

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

不需要你的x/y變量。只要你想改變球拍的位置就直接使用setLocation()方法。 – camickr

回答

2

還有你的問題:

window.setLayout(null); 

當您使用null佈局你的完整佈局,包括大小完全負責和所有添加組件的位置,並且在您的代碼中,當您設置JLabel的位置時,您沒有設置大小。正確的解決方案不是設置其大小,而是爲了避免使用空佈局。雖然Swing的新手可能看起來像是創建複雜GUI的最簡單也是最好的方式,但更多Swing GUI的創建使用它們時會遇到更嚴重的困難。它們不會在GUI大小調整時調整組件的大小,它們是增強或維護的皇室女巫,當它們放在滾動窗格中時它們會完全失敗,在所有平臺或屏幕分辨率與原始視圖不同時,它們看起來會非常糟糕。

+0

因爲這是一個「乒乓球」遊戲,它有一個球拍的隨機移動(上下)。我沒有使用空佈局的問題。但是你需要使用'setSize()'方法在構造函數中設置你的球拍的大小。 – camickr

+0

這的確是問題,非常感謝你的幫助! – gabevt