- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何初始化 Graphics 变量?
我尝试了 Graphics g = new Graphics()
和 Graphics g;
但它说它无法实例化。我需要将 Graphics g
从一种方法传递到另一种方法,所以我不能只从参数中调用它。感谢您的帮助。
这是我的代码:
import java.awt.Graphics;
import java.awt.Color;
import java.awt.Image;
import java.applet.Applet;
import java.lang.Math;
import java.util.Random;
public class testApp extends JApplet
{
public void init()
{
this.add(new RandomCardsPanel());
}
public RandomCardsPanel extends JPanel
{
public Image card1, card2, card3, card4, card5, card6, card7, card8, card9, card10, card11, card12, card13;
public Image card14, card15, card16, card17, card18, card19, card20, card21, card22, card23, card24, card25, card26;
public Image card27, card28, card29, card30, card31, card32, card33, card34, card35, card36, card37, card38, card39;
public Image card40, card41, card42, card43, card44, card45, card46, card47, card48, card49, card50, card51, card52;
public RandomCardsPanel()
{
Image[] card = new Image[52];
card[0] = getImage( getDocumentBase(), "c1.gif" );
card[1] = getImage( getDocumentBase(), "c2.gif" );
card[2] = getImage( getDocumentBase(), "c3.gif" );
card[3] = getImage( getDocumentBase(), "c4.gif" );
card[4] = getImage( getDocumentBase(), "c5.gif" );
card[5] = getImage( getDocumentBase(), "c6.gif" );
card[6] = getImage( getDocumentBase(), "c7.gif" );
card[7] = getImage( getDocumentBase(), "c8.gif" );
card[8] = getImage( getDocumentBase(), "c9.gif" );
card[9] = getImage( getDocumentBase(), "c10.gif" );
card[10] = getImage( getDocumentBase(), "cj.gif" );
card[11] = getImage( getDocumentBase(), "cq.gif" );
card[12] = getImage( getDocumentBase(), "ck.gif" );
card[13] = getImage( getDocumentBase(), "d1.gif" );
card[14] = getImage( getDocumentBase(), "d2.gif" );
card[15] = getImage( getDocumentBase(), "d3.gif" );
card[16] = getImage( getDocumentBase(), "d4.gif" );
card[17] = getImage( getDocumentBase(), "d5.gif" );
card[18] = getImage( getDocumentBase(), "d6.gif" );
card[19] = getImage( getDocumentBase(), "d7.gif" );
card[20] = getImage( getDocumentBase(), "d8.gif" );
card[21] = getImage( getDocumentBase(), "d9.gif" );
card[22] = getImage( getDocumentBase(), "d10.gif" );
card[23] = getImage( getDocumentBase(), "dj.gif" );
card[24] = getImage( getDocumentBase(), "dq.gif" );
card[25] = getImage( getDocumentBase(), "dk.gif" );
card[26] = getImage( getDocumentBase(), "h1.gif" );
card[27] = getImage( getDocumentBase(), "h2.gif" );
card[28] = getImage( getDocumentBase(), "h3.gif" );
card[29] = getImage( getDocumentBase(), "h4.gif" );
card[30] = getImage( getDocumentBase(), "h5.gif" );
card[31] = getImage( getDocumentBase(), "h6.gif" );
card[32] = getImage( getDocumentBase(), "h7.gif" );
card[33] = getImage( getDocumentBase(), "h8.gif" );
card[34] = getImage( getDocumentBase(), "h9.gif" );
card[35] = getImage( getDocumentBase(), "h10.gif" );
card[36] = getImage( getDocumentBase(), "hj.gif" );
card[37] = getImage( getDocumentBase(), "hq.gif" );
card[38] = getImage( getDocumentBase(), "hk.gif" );
card[39] = getImage( getDocumentBase(), "s1.gif" );
card[40] = getImage( getDocumentBase(), "s2.gif" );
card[41] = getImage( getDocumentBase(), "s3.gif" );
card[42] = getImage( getDocumentBase(), "s4.gif" );
card[43] = getImage( getDocumentBase(), "s5.gif" );
card[44] = getImage( getDocumentBase(), "s6.gif" );
card[45] = getImage( getDocumentBase(), "s7.gif" );
card[46] = getImage( getDocumentBase(), "s8.gif" );
card[47] = getImage( getDocumentBase(), "s9.gif" );
card[48] = getImage( getDocumentBase(), "s10.gif" );
card[49] = getImage( getDocumentBase(), "sj.gif" );
card[50] = getImage( getDocumentBase(), "sq.gif" );
card[51] = getImage( getDocumentBase(), "sk.gif" );
String cardNumber;
double cardRandom;
int cardRandomNumber;
public int[] ranNum = new int[10];
Random ran = new Random();
for (int number = 0; number <= 9; )
{
cardRandom = ran.nextInt(52) + 1;
cardRandomNumber = (int)Math.round( cardRandom );
if ( cardRandomNumber > 0 && cardRandomNumber <= 52 )
{
ranNum[number] = cardRandomNumber;
number++;
}
}
}
public void paintComponent(Graphics g)
{
setBackground( Color.green );
g.drawImage( cards[ranNum[0]], 10, 10, this);
}
}
最佳答案
通常您不需要初始化 Graphics
变量,因为大多数绘画应该在组件 paintComponent()
方法中完成。 (而且您不能执行 Graphics g = new Graphics();
因为 Graphics
是一个抽象类。)通常我会创建一个扩展 JPanel
并覆盖 paintComponent()
方法来执行我的自定义绘画。从那里,我可以将 Graphics
引用传递给需要它的任何其他方法。
试试这个。当然,我是在相当抽象的层面上谈论。让我们知道您从这些提示中得出的结论,我们将从那里开始工作。
编辑:
JComponent
声明了一个抽象方法 paintComponent(Graphics g)
.如果您想提供自己的实现,您必须与此方法签名完全匹配。这意味着您只能使用一个参数,即Graphics
对象。
您可以随意创建一个带有更多参数的 paintComponent()
方法,但是由于方法签名不匹配,当操作系统决定时,它不会在事件调度线程上自动调用您的 Applet 需要重新绘制。
话虽如此,您不必扩展 JPanel
即可使其正常工作。您可以扩展任何以 JComponent
作为祖先的类。在您的特定情况下,JPanel
似乎是最佳选择。我建议您重构代码如下:
在 RandomCards.java 中
public RandomCards extends JApplet {
public void init() {
this.add(new RandomCardsPanel();
}
}
在 RandomCardsPanel.java 中
public RandomCardsPanel extends JPanel {
// Put private member variables here
public RandomCardsPanel() {
// Put code from your current init() method here
}
public void paintComponent(Graphics g) {
// Put your custom painting code here, including setting the background color and drawing the card images
}
}
如果你不介意的话,我还有一些进一步的建议:
请注意,我正在扩展 JApplet
而不是 Applet
。这是首选类(class)。 Applet
仍然存在是为了向后兼容 AWT。现代 Java 小程序改用 JApplet
和 Swing。
缩进代码时,使用空格而不是制表符。选项卡以系统相关的方式显示。这意味着如果您在另一个编辑器或另一台计算机上查看您的代码,制表符格式的代码可能不会按您预期的方式显示。特别是,您可以看到该网站没有正确格式化您的代码。大多数文本编辑器都有用空格替换制表符的设置。我强烈建议您了解如何使用您的设备执行此操作。
当您发现自己使用的变量名称仅在数字后缀上有所不同时(例如 Image card1、card2、card3、card4、card5
等),您应该改用数组.
您正在在init()
方法中使用数组。但是,您已将其声明为局部变量。这意味着您的其他任何方法都无法看到您在此处声明的 card
数组。您应该将其声明为成员变量,而不是 card1、card2、card3
等变量。这同样适用于您需要在 paintComponent()
方法中使用的任何其他变量,因为它只能有一个 Graphics g
参数。
您不需要显式调用 paintComponent()
。事实上,您不应该明确地调用它。系统会在合适的时候调用这个方法。
我希望这有助于澄清几点。祝您在 Java 体验方面好运。如果您还有其他问题,请告诉我们。
关于java - 初始化图形变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12335121/
我是 Spring 新手,这就是我想要做的事情: 我正在使用一个基于 Maven 的库,它有自己的 Spring 上下文和 Autowiring 字段。 它的bean配置文件是src/test/res
我在我的测试脚本中有以下列表初始化: newSequenceCore=["ls", "ns", "*", "cm", "*", "ov", "ov", "ov", "ov", "kd"] (代表要在控
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Class construction with initial values 当我查看 http://en.
我得到了成员变量“objectCount”的限定错误。编译器还返回“ISO C++ 禁止非常量静态成员的类内初始化”。这是主类: #include #include "Tree.h" using n
我有如下所示的a.h class A { public: void doSomething()=0; }; 然后我有如下所示的b.h #include "a.h" class b: publi
我需要解析 Firebase DataSnapshot (一个 JSON 对象)转换成一个数据类,其属性包括 enum 和 list。所以我更喜欢通过传递 DataSnapshot 来手动解析它进入二
我使用 JQuery 一段时间了,我总是使用以下代码来初始化我的 javascript: $(document).ready( function() { // Initalisation logic
这里是 Objective-C 菜鸟。 为什么会这样: NSString *myString = [NSString alloc]; [myString initWithFormat:@"%f", s
我无法让核心数据支持的 NSArrayController 在我的代码中正常工作。下面是我的代码: pageArrayController = [[NSArrayController alloc] i
我对这一切都很陌生,并且无法将其安装到我的后端代码中。它去哪里?在我的页脚下面有我所有的 JS? 比如,这是什么意思: Popup initialization code should be exec
这可能是一个简单的问题,但是嘿,我是初学者。 所以我创建了一个程序来计算一些东西,它目前正在控制台中运行。我决定向其中添加一个用户界面,因此我使用 NetBeans IDE 中的内置功能创建了一个 J
我有 2 个 Controller ,TEST1Controller 和 TEST2Controller 在TEST2Controller中,我有一个initialize()函数设置属性值。 如果我尝
据我所知, dependentObservable 在声明时会进行计算。但如果某些值尚不存在怎么办? 例如: var viewModel ={}; var dependentObservable1 =
我正在阅读 POODR 这本书,它使用旧语法进行默认值初始化。我想用新语法实现相同的功能。 class Gear attr_reader :chainring, :cog, :wheel de
我按照 polymer 教程的说明进行操作: https://www.polymer-project.org/3.0/start/install-3-0 (我跳过了可选部分) 但是,在我执行命令“po
很抱歉问到一个非常新手的Kotlin问题,但是我正在努力理解与构造函数和初始化有关的一些东西。 我有这个类和构造函数: class TestCaseBuilder constructor(
假设我们有一个包含 30 列和 30 行的网格。 生命游戏规则简而言之: 一个小区有八个相邻小区 当一个细胞拥有三个存活的相邻细胞时,该细胞就会存活 如果一个细胞恰好有两个或三个活的相邻细胞,那么它就
我是 MQTT 和 Android 开放附件“AOA” 的新手。在阅读教程时,我意识到,在尝试写入 ByteArrayOutputStream 类型的变量之前,应该写入 0 或 0x00首先到该变量。
我有 2 个 Controller ,TEST1Controller 和 TEST2Controller 在TEST2Controller中,我有一个initialize()函数设置属性值。 如果我尝
我有一个inotify /内核问题。我正在使用“inotify” Python项目进行观察,但是,我的问题仍然是固有的关于inotify内核实现的核心。 Python inotify项目处理递归ino
我是一名优秀的程序员,十分优秀!