摇摆画问题?

时间:2011-09-24 11:11:09

标签: java swing validation paint repaint

我有一个名为JPanel的{​​{1}}扩展名,它在TPanel的右侧绘制了俄罗斯方块。 JFrame方法返回正在移动的当前片段,并且被限制在curr()的左侧(x <400)。现在出于某种原因,当我将它们都添加到JFrame时,我只能看到我添加的第二个,所以基本上它会覆盖另一个。我尝试了验证方法,但它不起作用。

如何同时显示它们?

以下是代码:

JFrame

2 个答案:

答案 0 :(得分:3)

  1. 内容窗格的默认布局为BorderLayout
  2. 如果某个组件未加约束地添加到BorderLayout,则会将其放入CENTER
  3. CENTER位置只能包含一个组件或容器。

  4. 因此,如果要立即猜测如何修复代码段,请尝试更改:

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

    要:

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

    或者更好的是:

    add(curr(), BorderLayout.LINE_END);
    

答案 1 :(得分:3)

  1. 奇怪的代码段,不可编译(例如setDefaultCloseOperation(EXIT_O…
  2. getContentPane()在Java 5及更高版本中无用,删除
  3. 您已为TPanel设置Focus
  4. 查找KeyBindings而不是KeyListener,然后您的密钥才能正常工作
  5. KeyBinding添加到TPanel
  6. 我希望你有Icons俄罗斯方块,
    • JLabels放入TPanel
    • JLabel.setIcon(myTetrisIcon)
  7. 您的代码可以在EDT之外,更多在“Swure中的Concurency”中,将输出包装到GUI(Icon重绘的代码)到invokeLater()
  8. 仅使用javax.swing.Timer制作动画
  9. 使用revalidate()repaint()
  10. 但是如果在Swing中有自定义绘画,那么问题应该来自任何地方