2011-09-24 84 views
2

我有一個名爲TPanelJPanel分機,該分機在JFrame的右側繪製了Tetris字樣。 curr()方法將返回正在移動的當前作品,並將其綁定到JFrame的左側(x < 400)。現在由於某種原因,當我將它們添加到JFrame時,我只能看到我添加的第二個,所以基本上它覆蓋了另一個。我已經嘗試了驗證方法,它不起作用。擺動畫問題?

如何同時顯示它們?

下面的代碼:

public Tetris() 
{ 
// frame stuff 
super("Tetris"); 
this.setSize(616,636); 
this.setVisible(true); 
this.setDefaultCloseOperation(EXIT_O… 

// components 
occ = new boolean [30][20]; 
rnd = new Random(); 
info = new TPanel(); 
for(int i=0;i<occ.length;i++) 
for(int j=0; j< occ[i].length;j++) 
occ [i][j] = false; 
pieces.add(initPiece()); 
this.getContentPane().add(info); 
this.getContentPane().add(curr()); 



this.getContentPane().validate(); 
repaint(); 
this.addKeyListener(this); 
run(); 
} 
+2

爲了更快得到更好的幫助,請發佈[SSCCE](http://pscode.org/sscce.html)。 –

回答

3
  1. 內容窗格的默認佈局是BorderLayout
  2. 如果一個組件添加到BorderLayout沒有約束,它被放置在CENTER
  3. CENTER位置只能包含一個組件或容器。

所以關於如何修復代碼段立即猜測,嘗試改變:

this.getContentPane().add(curr()); 

要:

this.getContentPane().add(curr(), BorderLayout.LINE_END); 

或者更好的是:

add(curr(), BorderLayout.LINE_END); 
3
  1. 奇怪的代碼片段,而不是編譯(例如setDefaultCloseOperation(EXIT_O…
  2. getContentPane()是Java 5無用和更高,刪除
  3. 已設置Focus爲TPanel
  4. 查找KeyBindings,而不是KeyListener,那麼你的鑰匙將是工作正常
  5. 添加KeyBinding到TPanel
  6. 我希望你有Icons的俄羅斯方塊,
    • JLabels到TPanel
    • JLabel.setIcon(myTetrisIcon)
  7. 你的代碼可能是美國東部時間之外,更在 「併發性在Swing」,包輸出到GUI(代碼Icon重畫)到invokeLater()
  8. 使用只有javax.swing.Timer爲動畫
  9. 使用revalidate()repaint()
  10. 但如果有風俗畫在Swing則問題(S)應來自任何地方