Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java向GPanel添加多个图像_Java_Arrays_Graphics2d - Fatal编程技术网

使用Java向GPanel添加多个图像

使用Java向GPanel添加多个图像,java,arrays,graphics2d,Java,Arrays,Graphics2d,我正在用java为学校制作一个21点游戏,我似乎不知道如何将前四张卡添加到GPanel。卡片数组被洗牌,数组中的字符串与图像的文件名匹配。我可以得到阵列中要加载的第一张卡,但不能得到其他三张卡。任何帮助都会很棒 public void paintComponent(Graphics g) { //System.out.println(gameInProgress); if(gameInProgress == true) { super.p

我正在用java为学校制作一个21点游戏,我似乎不知道如何将前四张卡添加到GPanel。卡片数组被洗牌,数组中的字符串与图像的文件名匹配。我可以得到阵列中要加载的第一张卡,但不能得到其他三张卡。任何帮助都会很棒

public void paintComponent(Graphics g) {
        //System.out.println(gameInProgress);

        if(gameInProgress == true) {
            super.paintComponent(g);

            Graphics2D g2 = (Graphics2D) g;
            Image image = null;
            int i;
            currentPosition = 0;
            for (i = 0; i < 4; i++) {
                image = Toolkit.getDefaultToolkit().getImage("images/"+deck[currentPosition - i]+".png");
                currentPosition++;
            }
            g2.drawImage(image, 115, 5, 80, (int) 106.67, this);
            g2.finalize();
        }
    }
公共组件(图形g){
//System.out.println(gameInProgress);
如果(gameInProgress==true){
超级组件(g);
图形2d g2=(图形2d)g;
图像=空;
int i;
currentPosition=0;
对于(i=0;i<4;i++){
image=Toolkit.getDefaultToolkit().getImage(“images/”+deck[currentPosition-i]+.png”);
currentPosition++;
}
g2.drawImage(图像,115,5,80,(int)106.67,本);
g2.finalize();
}
}

您的代码中有3个主要问题

第一个问题是由
[currentPosition-i]
引起的,因为结果总是等于0,因此数组索引0处的图像/卡将是唯一绘制的图像/卡

第二个问题是您只绘制一个图像,因为g2.drawImage仅在for循环之后调用,而应该位于for循环内部,以便绘制所有4个图像/卡

第三个问题是,您总是在同一个位置绘制图像,因此即使您在同一位置绘制所有4个图像,您也只能看到最后一个图像,因为它覆盖了之前的图像

尝试此操作,它将打印所有4个图像(假设您有一个435x112面板):

公共组件(图形g){
//System.out.println(gameInProgress);
如果(gameInProgress==true){
超级组件(g);
//添加两个新变量
int x=115;
图形2d g2=(图形2d)g;
图像=空;
int i;
对于(i=0;i<4;i++){
image=Toolkit.getDefaultToolkit().getImage(“images/”+deck[i]+.png”);
//g2.drawImage的新位置
//X位置每次都应该改变
g2.绘图图像(图像,x,5,80,107,本);
//更改下一个图像的X位置
x=x+80;
}
//将g2.drawImage从此处移到括号上方
g2.finalize();
}
}

您的首要问题是将某个东西称为GPanel
public void paintComponent(Graphics g) {
    //System.out.println(gameInProgress);

    if(gameInProgress == true) {
        super.paintComponent(g);

        //Add a couple new variables
        int x = 115;

        Graphics2D g2 = (Graphics2D) g;
        Image image = null;
        int i;
        for (i = 0; i < 4; i++) {
            image = Toolkit.getDefaultToolkit().getImage("images/"+deck[i]+".png");
            //New location of g2.drawImage
            //The X positions should change each time
            g2.drawImage(image, x, 5, 80, 107, this);
            //Change the X location of the next image
            x = x + 80;
        }
        //Moved g2.drawImage from here to above the bracket
        g2.finalize();
    }
}