需要关于JavaGUI的帮助吗

需要关于JavaGUI的帮助吗,java,swing,Java,Swing,我正在Java上创建一个三张牌的扑克游戏。 我现在基本上已经完成了编码,但是我在GUI方面遇到了一些问题。 以下是我的图形部分代码: import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.awt.image.*; import java.util.Scanner; import javax.*; public class Board extends dealer{ final sta

我正在Java上创建一个三张牌的扑克游戏。 我现在基本上已经完成了编码,但是我在GUI方面遇到了一些问题。 以下是我的图形部分代码:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.image.*;
import java.util.Scanner;

import javax.*;

public class Board extends dealer{
    final static boolean shouldFill = true;
    final static boolean shouldWeightX = true;
    final static boolean RIGHT_TO_LEFT = false;
    public static Image cardback;
    public static Image comp1;
    public static Image comp2;
    public static Image comp3;
    public static Image play1;
    public static Image play2;
    public static Image play3;
    public static int x,y;
    public static int numgames;
    public static int bet;
    public static int wlt=7;
    public static int dealorfold=1;
    public static int showcard=1;
    static int playermoney;
    static int compmoney; 
    protected static hand player;
    protected static hand computer;
    static class deal implements ActionListener{
        public void actionPerformed(ActionEvent e){
            dealorfold=2;
        }
    }

    static class fold implements ActionListener{
        public void actionPerformed(ActionEvent e){
            dealorfold=3;
        }
    }

    static class allin implements ActionListener{
        public void actionPerformed(ActionEvent e){
            bet=playermoney;
        }
    }

    static class ten implements ActionListener{
        public void actionPerformed(ActionEvent e){
            if(playermoney<10)
                wlt=9;          
            else
                bet=10;
        }
    }

    static class fifty implements ActionListener{
        public void actionPerformed(ActionEvent e){
            if(playermoney<50)
                wlt=9;          
            else
                bet=50;
        }
    }

    static class hundred implements ActionListener{
        public void actionPerformed(ActionEvent e){
            if(playermoney<100)
                wlt=9;          
            else
                bet=100;
        }
    }

    static class fivehund implements ActionListener{
        public void actionPerformed(ActionEvent e){
            if(playermoney<500)
                wlt=9;          
            else
                bet=500;
        }
    }

    static class thaud implements ActionListener{
        public void actionPerformed(ActionEvent e){
            if(playermoney<1000)
                wlt=9;          
            else
                bet=1000;
        }
    }

    static class fivethaud implements ActionListener{
        public void actionPerformed(ActionEvent e){
            if(playermoney<5000)
                wlt=9;          
            else
                bet=5000;
        }
    }

    static class tenthaud implements ActionListener{
        public void actionPerformed(ActionEvent e){
            if(playermoney<10000)
                wlt=9;          
            else
                bet=10000;
        }
    }   

    private static void createAndShowGUI() {
        setcards();
        JFrame frame = new JFrame("Three Card Poker");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setPreferredSize(new Dimension(1366,768));
        addComponentsToPane(frame.getContentPane());
        frame.pack();
        frame.setVisible(true);

        int p1 = checkpattern(player);
        int c1 = checkpattern(computer);
        while(dealorfold==1){
            if(dealorfold==2){
                if(p1>c1){
                    compmoney = compmoney - bet;
                    playermoney = playermoney + bet;
                    showcard=2;
                    wlt=1;
                }
                else if (p1<c1){
                    compmoney = compmoney + bet;
                    playermoney = playermoney - bet;
                    showcard=2;
                    wlt=2;
                }
                else if(p1==0 && c1==0){
                    if(checkhighercardinhand(player, computer)==0){
                        compmoney = compmoney - bet;
                        playermoney = playermoney + bet;
                        showcard=2;
                        wlt=1;

                    }
                    else if(checkhighercardinhand(player, computer)==1){
                        compmoney = compmoney + bet;
                        playermoney = playermoney - bet;
                        showcard=2;
                        wlt=2;
                    }
                    else if(checkhighercardinhand(player, computer)==2){
                        showcard=2;
                        wlt=3;
                    }
                }
                else if(p1==1 && c1==1){
                    if(checkhigherpair(player, computer)==0){
                        compmoney = compmoney - bet;
                        playermoney = playermoney + bet;
                        showcard=2;
                        wlt=1;
                    }
                    else if(checkhigherpair(player, computer)==1){
                        compmoney = compmoney + bet;
                        playermoney = playermoney - bet;
                        showcard=2;
                        wlt=2;
                    }
                    else if(checkhigherpair(player, computer)==2){
                        showcard=2;
                        wlt=3;
                    }
                }
                else if(p1 == c1 && p1 >= 3){
                    int check = checkhigherthanstraight(player, computer);

                    if(check == 0){
                        compmoney = compmoney - bet;
                        playermoney = playermoney + bet;
                        showcard=2;
                        wlt=1;
                    }
                    else if (check == 1){
                        compmoney = compmoney + bet;
                        playermoney = playermoney - bet;
                        showcard=2;
                        wlt=2;
                    }
                    else{
                        showcard=2;
                        wlt=3;
                    }
                }
                else if(p1 == c1 && p1 == 2){
                    showcard=2;
                    wlt=3;
                }
            }

            else{
                playermoney=playermoney-50;
                showcard=2;
                wlt=4;
            }                   
        }
    }

    public static void addComponentsToPane(Container pane) {
        if (RIGHT_TO_LEFT) {
            pane.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
        }

        pane.setLayout(new GridBagLayout());
        GridBagConstraints c = new GridBagConstraints();

        JLabel comp = new JLabel("Computer:");
        if (shouldWeightX) {
            c.weightx = 0.5;
        }
        c.fill = GridBagConstraints.HORIZONTAL;
        c.gridx = 0;
        c.gridy = 0;
        c.insets=new Insets(0,0,100,0);
        pane.add(comp, c);

        JLabel c1 = new JLabel(computer.get(0)+"");
        c.fill = GridBagConstraints.HORIZONTAL;
        c.weightx = 0.5;
        c.gridx = 1;
        c.gridy = 0;
        pane.add(c1, c);

        JLabel c2 = new JLabel(computer.get(1)+"");
        c.fill = GridBagConstraints.HORIZONTAL;
        c.weightx = 0.5;
        c.gridx = 2;
        c.gridy = 0;
        pane.add(c2, c);

        JLabel  c3= new JLabel(computer.get(2)+"");
        c.fill = GridBagConstraints.HORIZONTAL;
        c.weightx = 0.5;
        c.gridx = 3;
        c.gridy = 0;
        pane.add(c3, c);

        JLabel compcash=new JLabel("Dealer has: "+compmoney);
        c.fill = GridBagConstraints.HORIZONTAL;
        c.weightx = 0.5;
        c.gridx = 6;
        c.gridy = 1;
        pane.add(compcash, c);

        JLabel player1 = new JLabel("Player:");
        c.fill = GridBagConstraints.HORIZONTAL;
        c.weightx=.5;
        c.gridx = 0;
        c.gridy = 2;
        pane.add(player1, c);

        JLabel p1 = new JLabel(player.get(0)+"");
        c.fill = GridBagConstraints.HORIZONTAL;
        c.weightx = 0.5;
        c.gridx = 1;
        c.gridy = 2;
        pane.add(p1, c);

        JLabel p2 = new JLabel(player.get(1)+"");
        c.fill = GridBagConstraints.HORIZONTAL;
        c.weightx = 0.5;
        c.gridx = 2;
        c.gridy = 2;
        pane.add(p2, c);

        JLabel p3 = new JLabel(player.get(2)+"");
        c.fill = GridBagConstraints.HORIZONTAL;
        c.weightx = 0.5;
        c.gridx = 3;
        c.gridy = 2;
        pane.add(p3, c);

        JLabel playcash=new JLabel("You have: "+playermoney);
        c.fill = GridBagConstraints.HORIZONTAL;
        c.weightx = 0.5;
        c.gridx = 6;
        c.gridy = 2;
        pane.add(playcash, c);

        JLabel pattern=new JLabel("Your hand is: ");
        c.fill = GridBagConstraints.HORIZONTAL;
        c.weightx = 0.5;
        c.gridx = 6;
        c.gridy = 3;
        pane.add(pattern, c);

        JButton deal = new JButton("Deal");
        c.fill = GridBagConstraints.HORIZONTAL;
        c.weightx = 0.5;
        c.gridx = 0;
        c.gridy = 5;
        pane.add(deal, c);
        deal.addActionListener(new deal());

        JButton fold = new JButton("Fold(Penalty: minus $50)");
        c.fill = GridBagConstraints.HORIZONTAL;
        c.weightx = 0.5;
        c.gridx = 1;
        c.gridy = 5;
        pane.add(fold, c);
        fold.addActionListener(new fold());

        JLabel bet = new JLabel("             Bet:");
        c.fill = GridBagConstraints.HORIZONTAL;
        c.weightx = 0.5;
        c.gridx = 2;
        c.gridy = 5;
        pane.add(bet, c);

        JButton allin = new JButton("All IN");
        c.fill = GridBagConstraints.HORIZONTAL;
        c.weightx = 0.5;
        c.gridx = 3;
        c.gridy = 5;
        pane.add(allin, c);
        allin.addActionListener(new allin());

        JButton ten= new JButton("10");
        c.fill = GridBagConstraints.HORIZONTAL;
        c.weightx = 0.5;
        c.gridx = 4;
        c.gridy = 5;
        pane.add(ten, c);
        ten.addActionListener(new ten());

        JButton fifty = new JButton("50");
        c.fill = GridBagConstraints.HORIZONTAL;
        c.weightx = 0.5;
        c.gridx = 5;
        c.gridy = 5;
        pane.add(fifty, c);
        fifty.addActionListener(new fifty());

        JButton hundred = new JButton("100");
        c.fill = GridBagConstraints.HORIZONTAL;
        c.weightx = 0.5;
        c.gridx = 6;
        c.gridy = 5;
        pane.add(hundred, c);
        hundred.addActionListener(new hundred());

        JButton fivehund = new JButton("500");
        c.fill = GridBagConstraints.HORIZONTAL;
        c.weightx = 0.5;
        c.gridx = 7;
        c.gridy = 5;
        pane.add(fivehund, c);
        fivehund.addActionListener(new fivehund());

        JButton thaud = new JButton("1000");
        c.fill = GridBagConstraints.HORIZONTAL;
        c.weightx = 0.5;
        c.gridx = 8;
        c.gridy = 5;
        pane.add(thaud, c);
        thaud.addActionListener(new thaud());

        JButton fivethaud = new JButton("5000");
        c.fill = GridBagConstraints.HORIZONTAL;
        c.weightx = 0.5;
        c.gridx = 9;
        c.gridy = 5;
        pane.add(fivethaud, c);
        fivethaud.addActionListener(new fivethaud());

        JButton tenthaud = new JButton("10000");
        c.fill = GridBagConstraints.HORIZONTAL;
        c.weightx = 0.5;
        c.gridx = 10;
        c.gridy = 5;
        pane.add(tenthaud, c);
        tenthaud.addActionListener(new tenthaud());

        String mess;
        if(wlt==1)
            mess="You Win The Round!";
        else if(wlt==2)
            mess="Dealer Wins The Round!";
        else if(wlt==3)
            mess="You And Dealer Tie The Round";
        else if(wlt==4)
            mess="You Folded. You Recieve Penalty of Minus $50";
        else if(wlt==5)
            mess="Dealer Loses All Of Its Money, YOU WIN THE WHOLE GAME!";
        else if(wlt==6)
            mess="You Lose All Of You Money, You Lose The Whole Game!";
        else if(wlt==7)
            mess="Please Click Deal Or Fold";
        else if(wlt==8)
            mess="Please Place Your Bet";
        else
            mess="Please Select Another Bet.";

        JLabel message = new JLabel(mess);
        c.fill = GridBagConstraints.HORIZONTAL;
        c.weightx = 0;
        c.gridx = 6;
        c.gridy = 4;
        pane.add(message, c);

        JLabel label = new JLabel("");
        c.fill = GridBagConstraints.HORIZONTAL;
        c.ipady = 40;
        c.weightx = 0.0;
        c.gridwidth = 3;
        c.gridx = 0;
        c.gridy = 2;
        pane.add(label, c);

        label = new JLabel("");
        c.fill = GridBagConstraints.HORIZONTAL;
        c.ipady = 0;       
        c.weighty = 1.0;   
        c.anchor = GridBagConstraints.PAGE_END; 
        c.insets = new Insets(10,0,0,0);  
        c.gridx = 1;       
        c.gridwidth = 2;   
        c.gridy = 2;      
        pane.add(label, c);
    }

    public static void setmoney(){
        compmoney=10000000;
        playermoney=10000000;   
    }

    public static void setcards(){
        player = new hand();
        computer= new hand();
        player.addCard(new cards());
        player.addCard(new cards());
        player.addCard(new cards());
        computer.addCard(new cards());
        computer.addCard(new cards());
        computer.addCard(new cards());
        cardswoprob.correctduplicates(player, computer);
    }

    public static void play(){
        for(int index=0;compmoney>=10&&playermoney>=10;index++){
            wlt=7;
            int p1 = checkpattern(player);
            int c1 = checkpattern(computer);
            while(dealorfold==1){
                if(dealorfold==2){
                    if(p1>c1){
                        compmoney = compmoney - bet;
                        playermoney = playermoney + bet;
                        showcard=2;
                        wlt=1;
                    }
                    else if (p1<c1){
                        compmoney = compmoney + bet;
                        playermoney = playermoney - bet;
                        showcard=2;
                        wlt=2;
                    }
                    else if(p1==0 && c1==0){
                        if(checkhighercardinhand(player, computer)==0){
                            compmoney = compmoney - bet;
                            playermoney = playermoney + bet;
                            showcard=2;
                            wlt=1;

                        }
                        else if(checkhighercardinhand(player, computer)==1){
                            compmoney = compmoney + bet;
                            playermoney = playermoney - bet;
                            showcard=2;
                            wlt=2;
                        }
                        else if(checkhighercardinhand(player, computer)==2){
                            showcard=2;
                            wlt=3;
                        }
                    }
                    else if(p1==1 && c1==1){
                        if(checkhigherpair(player, computer)==0){
                            compmoney = compmoney - bet;
                            playermoney = playermoney + bet;
                            showcard=2;
                            wlt=1;
                        }
                        else if(checkhigherpair(player, computer)==1){
                            compmoney = compmoney + bet;
                            playermoney = playermoney - bet;
                            showcard=2;
                            wlt=2;
                        }
                        else if(checkhigherpair(player, computer)==2){
                            showcard=2;
                            wlt=3;
                        }
                    }
                    else if(p1 == c1 && p1 >= 3){
                        int check = checkhigherthanstraight(player, computer);

                        if(check == 0){
                            compmoney = compmoney - bet;
                            playermoney = playermoney + bet;
                            showcard=2;
                            wlt=1;
                        }
                        else if (check == 1){
                            compmoney = compmoney + bet;
                            playermoney = playermoney - bet;
                            showcard=2;
                            wlt=2;
                        }
                        else{
                            showcard=2;
                            wlt=3;
                        }
                    }
                    else if(p1 == c1 && p1 == 2){
                        showcard=2;
                        wlt=3;
                    }
                }

                else{
                    playermoney=playermoney-50;
                    showcard=2;
                    wlt=4;
                }                   
            }
        }
        if(playermoney > compmoney)
            wlt=5;
        else
            wlt=6;
    }

    public static void main(String[] args) {
        setmoney();
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                while(compmoney>=10&&playermoney>=10)
                createAndShowGUI();
                if(playermoney > compmoney)
                    wlt=5;
                else
                    wlt=6;
            }
        });
    }
}
import java.awt.*;
导入javax.swing.*;
导入java.awt.event.*;
导入java.awt.image.*;
导入java.util.Scanner;
导入javax.*;
公共类董事会扩大经销商{
最终静态布尔值shouldFill=true;
最终静态布尔值shouldWeightX=true;
最终静态布尔值从右到左=false;
公共静态图像卡;
公共静态图像comp1;
公共静态图像组件2;
公共静态图像comp3;
公共静态图像播放1;
公共静态图像播放2;
公共静态图像播放3;
公共静态int x,y;
公共静态整数;
公共静态整数赌注;
公共静态int wlt=7;
公共静态整数dealorfold=1;
公共静态int显示卡=1;
静态整数playermoney;
静态货币;
保护静态手持播放器;
防静电手持计算机;
静态类处理实现ActionListener{
已执行的公共无效操作(操作事件e){
dealorfold=2;
}
}
静态类fold实现ActionListener{
已执行的公共无效操作(操作事件e){
dealorfold=3;
}
}
静态类allin实现ActionListener{
已执行的公共无效操作(操作事件e){
赌注=玩家金钱;
}
}
静态类10实现ActionListener{
已执行的公共无效操作(操作事件e){
如果(playermoney=10)
createAndShowGUI();
如果(playermoney>compmoney)
wlt=5;
其他的
wlt=6;
}
});
}
}
主要的问题是,在
createAndShowGUI()
中,如果我将while循环放在那里,我尝试了(for-loop,do-loop),那么
JPanel
只会显示出来,但里面什么都没有。如果那里没有while循环,那么
JPanel
将定期显示,其中包含所有内容。 但是我需要while循环中的代码,因为代码基本上就是游戏

我试图创建一个自己的方法(
play()
),但是如果我在
main()
或任何地方调用它,
JPanel
将是白色的(没有)


这里是我的第二个问题:如果你删除while循环,JPanel会正常显示,你会看到电脑的手和玩家的手,但是是文本形式的。我想知道如何用图像替换文本。

对于GUI,您应该实现
Runnable
并使用
SwingUtilities。invokeLater(Runnable)

要使用图像,应使用
ImageIcon
类:

ImageIcon imageIcon = new ImageIcon("<path to image>");
然后显示它:

JLabel imageLabel = new JLabel(imageIcon);

对于GUI,您应该实现
Runnable
并使用
SwingUtilities.invokeLater(Runnable)

要使用图像,应使用
ImageIcon
类:

ImageIcon imageIcon = new ImageIcon("<path to image>");
然后显示它:

JLabel imageLabel = new JLabel(imageIcon);

很少有事情,但并非所有事情都与GUI直接相关:

丢失静态成员,它们不应该在那里,我假设您使用了它们,因为所有内容都是从主方法调用的,但这不是方法。Java是一种面向对象的编程语言,创建类,实例化类并使用它们,不需要在一个类中执行所有的工作,甚至没有实例化

重构重复代码,而不是创建一个值不同的类,而是创建更多的泛型类。例如,不是5个不同的类,而是:

static class ten implements ActionListener{
    public void actionPerformed(ActionEvent e){
        if(playermoney<10)
            wlt=9;          
        else
            bet=10;
    }
}
静态类10实现ActionListener{
已执行的公共无效操作(操作事件e){

如果(playermoney很少有东西,但并非所有东西都与GUI直接相关:

失去静态成员,它们不应该在那里,我假设您使用了它们,因为所有东西都是从主方法调用的,但这不是方法。Java是一种面向对象的编程语言,创建类,实例化并使用它们,不在一个类中执行所有工作,甚至没有实例化

重构重复代码,而不是创建一个值不同的类,而是创建更多的泛型类。例如,不是像这样创建5个不同的类:

static class ten implements ActionListener{
    public void actionPerformed(ActionEvent e){
        if(playermoney<10)
            wlt=9;          
        else
            bet=10;
    }
}
静态类10实现ActionListener{
已执行的公共无效操作(操作事件e){

如果(playermoneyYou不想在事件驱动程序中出现繁忙的循环。重写代码并去掉所有的静态变量和方法。这不是设计程序的方法。而且,对于类名,一定要遵循通常的Java命名约定!没有Java程序员会想在当前状态下检查您的代码。各位,codereview是用来检查的改进工作代码,它不是调试坏代码的地方。你不想在事件驱动程序中出现繁忙的循环。重写代码,去掉所有静态变量和方法。这不是设计程序的方法。而且,对于类名,一定要遵循通常的Java命名约定!没有Java程序员愿意检查你的代码在当前状态下,codereview用于检查和改进工作代码,而不是调试损坏的代码。