【问题标题】:Repainting in Java Swing with containers使用容器在 Java Swing 中重绘
【发布时间】:2011-03-01 21:46:01
【问题描述】:

我有一个简单的网格,可以在用户点击的任何地方放置一个正方形。网格和对窗格的访问保存在“游戏”对象中。

这行得通:

private void buildClicked(int x, int y) {
    panel.repaint();
    game.buy(x, y);
}

这不会触发重绘:

private void buildClicked(int x, int y) {
    game.getPanel().repaint();
    game.buy(x, y);
}

如果我将面板设为 Game 的公共变量,这也不起作用:

private void buildClicked(int x, int y) {
    game.panel.repaint();
    game.buy(x, y);
}

"getPanel" 只返回顶部的 "panel" 对象所指的同一个自定义面板对象。

我想将面板包含在游戏对象包装器中。同样,在“购买”函数中调用重绘函数也不起作用。

为什么“重绘”函数在上述示例中表现不同?

【问题讨论】:

  • 你确定panel == game.getPanel(); - 如果有自定义对象,请确保你没有覆盖任何你不应该覆盖的东西。
  • 同意,您可能会遇到错误解释的引用问题——您认为引用可见组件的变量实际上并非如此。仅凭您提供的少量 sn-ps 代码很难分辨。

标签: java swing panel repaint


【解决方案1】:

我的问题下的 cmets 完全正确。我一直在 Game 对象和窗口本身中分别声明面板。另一个被新材料所吸引而遗漏一些基本内容的案例。谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-17
    • 2012-01-25
    • 2019-11-27
    • 2018-06-16
    相关资源
    最近更新 更多