gpt4 book ai didi

java - 初始化图形变量

转载 作者:行者123 更新时间:2023-11-29 08:04:23 24 4
gpt4 key购买 nike

如何初始化 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
}
}

如果你不介意的话,我还有一些进一步的建议:

  1. 请注意,我正在扩展 JApplet 而不是 Applet。这是首选类(class)。 Applet 仍然存在是为了向后兼容 AWT。现代 Java 小程序改用 JApplet 和 Swing。

  2. 缩进代码时,使用空格而不是制表符。选项卡以系统相关的方式显示。这意味着如果您在另一个编辑器或另一台计算机上查看您的代码,制表符格式的代码可能不会按您预期的方式显示。特别是,您可以看到该网站没有正确格式化您的代码。大多数文本编辑器都有用空格替换制表符的设置。我强烈建议您了解如何使用您的设备执行此操作。

  3. 当您发现自己使用的变量名称仅在数字后缀上有所不同时(例如 Image card1、card2、card3、card4、card5 等),您应该改用数组.

  4. 正在init() 方法中使用数组。但是,您已将其声明为局部变量。这意味着您的其他任何方法都无法看到您在此处声明的 card 数组。您应该将其声明为成员变量,而不是 card1、card2、card3 等变量。这同样适用于您需要在 paintComponent() 方法中使用的任何其他变量,因为它只能有一个 Graphics g 参数。

  5. 您不需要显式调用 paintComponent()。事实上,您不应该明确地调用它。系统会在合适的时候调用这个方法。

我希望这有助于澄清几点。祝您在 Java 体验方面好运。如果您还有其他问题,请告诉我们。

关于java - 初始化图形变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12335121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com