【问题标题】:Java Swing - Using paintIcon in different class from JFrame oneJava Swing - 在与 JFrame 一不同的类中使用paintIcon
【发布时间】:2014-03-12 02:08:56
【问题描述】:

我正在做一个小象棋游戏,它有类 whitePawnPiece 扩展 whitePiece 扩展 chessMain 扩展 chessGUI

chessGUIJFramewhitePawnPiece 是我想做的whitePawnIcon.paintIcon (...,...,xPos, yPos)

嗯,首先我不太了解前两个参数,但从我读到的第一个可以是null,第二个应该是JFrame

我的问题是:如何使用第二个参数?我正在使用 NetBeans,它接受第一个参数为 null,但第二个参数,无论我输入什么,它都会给出错误“找不到符号”之类的。

PS:我使用 NetBeans IDE 编写 GUI,但在阅读了代码后,我认为自己编写 GUI 更容易更好,所以这是我第一次尝试编写 GUI 本身 :)

还有一个额外的问题:当我使用 NetBeans IDE 时,在将布局设置为 Absolute 之前,我在叠加图像时遇到了一些问题(我使用标签来处理图标)。我现在会不会有同样的问题?我应该使用默认布局还是有更好的布局用于具有大量覆盖(棋盘、棋子、选择/可能的移动标记)的国际象棋程序?

【问题讨论】:

  • " 我正在使用 NetBeans IDE 编写 GUI,但在阅读了代码后,我认为自己编写 GUI 更容易更好," - 好电话 :)跨度>
  • 附带说明,使用 java 命名约定。类名以大写字母开头。
  • 还有whiteChessPiece 拥有所有这些祖先,对我来说真的没有意义。我可以看到whitePeice,但为什么是其他人?似乎不是最伟大的设计。如果您需要从其他类访问实例变量,不要期望继承起作用。只是一个提示。
  • @peeskillet 我以为约定是lowerCamelCase,一定与方法命名约定混淆了嘿嘿!关于这些类,我计划重写,所以每块都有从 whitePiece 重写的 draw 和 move 方法,所以我可以像 whitePiece = whitePawnPiece 一样使用 move whitePiece
  • 小写用于变量。但是,是的,这两种情况都是骆驼外壳。

标签: java swing netbeans jframe imageicon


【解决方案1】:

这有点令人困惑,但是...

Icon 声明paintIcon 采用四个参数...

  • Component
  • Graphics
  • int x
  • int y

这是对某些组件的引用,大概是与 Graphics 上下文相关联的组件,因为 Component 很可能将用作 ImageObsever 以在需要时监视图标的更改待更新,可能会提供其他有用的信息

Graphics 上下文是要绘制图像的实际位置(图形输出)。

现在,说了这么多,为了成功绘制图标,您需要某种Graphics 上下文的引用。这可以通过扩展一个组件(如JPanel),覆盖它的paintComponent 方法来获得。这将使您可以访问Graphics 上下文,该上下文可用于在此绘制周期中绘制内容。永远不要维护对不是您自己创建的 Graphics 上下文的引用。

然后您将调用paintIcon 传递对组件的引用和Graphics 上下文。

看看Performing Custom PaintingPainting in AWT and Swing2D Graphics

说了这么多,我想你会使用BufferedImages(或Image)比Icon更简单。更多详情请关注Reading/Loading an Image

关于你的第二个问题。不,您不会遇到同样的问题,您会遇到全新的问题

【讨论】:

    猜你喜欢
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    • 2012-01-29
    • 2011-05-25
    相关资源
    最近更新 更多