需要关于JavaGUI的帮助吗
我正在Java上创建一个三张牌的扑克游戏。 我现在基本上已经完成了编码,但是我在GUI方面遇到了一些问题。 以下是我的图形部分代码:需要关于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
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用于检查和改进工作代码,而不是调试损坏的代码。