2011-09-24 54 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)应来自任何地方