Java 纸牌游戏图形:更新面板中画布对象的矢量

Java 纸牌游戏图形:更新面板中画布对象的矢量,java,vector,panel,Java,Vector,Panel,因此,我正在创建一个纸牌游戏金酒酒。我正在处理图形,特别是创建一个更新面板,以便它始终显示玩家手中牌对象的矢量。卡本身是扩展canvas类的组件。我要问的是如何创建一些函数updatePanel,当玩家的手牌向量改变时更新面板。我所能想到的就是从GUI框架中移除旧面板,创建一个新面板,用玩家手中的卡片填充新面板,然后将新面板粘贴到GUI框架上。我甚至还没有编写代码,因为我担心从GUI框架上取下一个组件,然后再将其重新加载会有破坏布局的风险,我的直觉告诉我,每次创建一个新面板都是一个坏主意。所以我

因此,我正在创建一个纸牌游戏金酒酒。我正在处理图形,特别是创建一个更新面板,以便它始终显示玩家手中牌对象的矢量。卡本身是扩展canvas类的组件。我要问的是如何创建一些函数updatePanel,当玩家的手牌向量改变时更新面板。我所能想到的就是从GUI框架中移除旧面板,创建一个新面板,用玩家手中的卡片填充新面板,然后将新面板粘贴到GUI框架上。我甚至还没有编写代码,因为我担心从GUI框架上取下一个组件,然后再将其重新加载会有破坏布局的风险,我的直觉告诉我,每次创建一个新面板都是一个坏主意。所以我要求一个更好的计划

您还会注意到selectButton的actionPerformed方法不完整。我要做的是移除有焦点的卡片。我了解焦点和行动事件是如何工作的,但我不了解的是如何在面板中搜索并找到所选的卡并将其删除

我非常感谢任何关于updatePanel或selectButton的actionPerformed方法的帮助,或者关于在整个程序过程中从面板添加和删除对象的任何其他有用信息

// GraphicGinRumy

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.Vector;
import java.util.Random;

public class GraphicGinRumy extends GUIFrame {

    protected Card card;
    protected Button selectButton, newGameButton;
    protected Panel controlPanel, playerPanel;
    protected RandomCardDeck deck;
    protected Vector<Card> playerHand;

    //Pardon this weird indentation...the code didn't copy to stack overflow correctly
    public GraphicGinRumy() {
        super("Gin Rumy");
        deck = new RandomCardDeck();
        playerHand = new Vector<Card>();

        MouseListener ml = new MouseAdapter() {
            public void mousePressed(MouseEvent e) {
                Card selectedCard = (Card) e.getSource();
                if (selectedCard.getFocused()) {
                    selectedCard.setFocused(false);
                } else {
                    selectedCard.setFocused(true);
                }
            }
        };

        deck.shuffle();
        rumyDeal();

        //Player Panel
        playerPanel = new Panel();
        for (int c = 0; c < playerHand.size(); c++) {
            playerPanel.add(playerHand.elementAt(c));
        }
        add(playerPanel, BorderLayout.CENTER);

        //Control Panel
        controlPanel = new Panel();
        selectButton = new Button("Select");
        selectButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            }
        });
        controlPanel.add(selectButton);
        newGameButton = new Button("New Game");
        newGameButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                deck.shuffle();
                deck.deal();
                updatePanel();
            }
        });
        controlPanel.add(newGameButton);
        add(controlPanel, BorderLayout.SOUTH);

        setSize(500, 100);
        setVisible(true);

        //__________________________________________________________________
        //Game Setup
        //__________________________________________________________________

        //Set card values:
        //2 to 9 is worth 5 pts; 10 to K is worth 10 pts; A is worth 15 pts
        for (int c = 0; c < deck.getNumCards(); c++) {
            card = deck.getCard(c);
            if (card.getFaceValue() < 10) {
                card.setValue(5);
            } else if (card.getFaceValue() < Card.ACE) {
                card.setValue(10);
            } else {
                card.setValue(15);
            }
        }

    }

    public static void main(String args[]) {
        GraphicGinRumy rumy = new GraphicGinRumy();
        //rumy.play();
    }

    protected void rumyDeal() {
        //Give player and CPU 7 cards and add 1 to the discardPile
        Card card;
        int numCards = 7;
        for (int i = 0; i < numCards; i++) {
            playerHand.add(deck.deal());
        }
        for (int i = 0; i < numCards; i++) {
            card = deck.deal();
            card.setVisible(true);
            cpuHand.add(card);
        }
        discardPile.add(deck.deal());
    }

    protected void updatePanel() {
        playerPanel = new Panel();
    }
}

什么是信用卡?它是某种组件吗?是的,它扩展了画布,所以你可以把卡片向量当作画布对象的向量。什么是卡片?它是某种组件吗?是的,它扩展了画布,所以你可以把卡片向量当作画布对象的向量。