【问题标题】:Error when calling "get" method in JFames在 JFames 中调用“get”方法时出错
【发布时间】:2014-01-17 01:02:25
【问题描述】:

我正在制作一个二十一点类型的游戏,并且想将赌注金额从实际二十一点框架传递到另一个框架,当您赢/输时弹出赢/输金额。我的代码是:

public int getBet() {
    return (bet1);
}
public int getMoney() {
    return (money1);
}

(以上所有代码都在公共类中,而不是公共方法中)。

当我尝试使用来自另一个框架(弹出窗口)的这些 get 语句中的任何一个时

public class LoseFrame extends JFrame {
    JLabel Lost;
    int bet;
    public LoseFrame(){
        super("LoseFrame");
        JFrame LoseFrame = new JFrame("");
        JPanel panel = new JPanel();
        panel.setBackground(Color.LIGHT_GRAY);
        Lost = new JLabel("Sorry, you busted and lost $" + blackJackFrame.getBet());
        panel.add(Lost);
        LoseFrame.setBounds (300, 300, 400, 70);
        LoseFrame.setContentPane (panel);
        LoseFrame.setVisible (true);
    }  
}

它给了我错误:

C:\LoseFrame.java:27: error: non-static method getBet() cannot be referenced from a static context
    Lost = new JLabel("Sorry, you busted and lost $" + blackJackFrame.getBet());

感谢任何帮助过的人,如果需要更多信息,我可以发布它,在此停留了一段时间,可能是一个简单的错误。谢谢 编辑: 这是blackjackframe的开始,它的代码超过2500行,不知道你是否要我发布它,但是get方法在公共类中......去掉了一些东西让它更具可读性

public class blackJackFrame extends JFrame implements ActionListener{
    JLabel bet,money,card1,card2,card3,card4,card5,handscore;
    JButton hit,deal,stand;
    JRadioButton b10,b50,b100,b250,b500,b1000;
    int bet1=1,money1=1000;     

    boolean gameinprogress = false,playerbust = false,dealerbust = false;
public blackJackFrame() {

编辑#2: blackjackFrame 正在通过按钮从主页启动。它正在使用代码启动:

public class PlayFrame extends JFrame implements ActionListener {
JButton slots,blackJack;
public PlayFrame(){
    super("PlayFrame");
    JFrame PlayFrame = new JFrame("Chrisino Lobby");
    JPanel panel = new JPanel();

    PlayFrame.setBounds (300, 300, 250, 100);

    slots = new JButton("Slots");
    blackJack = new JButton("BlackJack");


    slots.addActionListener(this);
    blackJack.addActionListener(this);


    panel.add(slots);
    panel.add(blackJack);


    PlayFrame.setContentPane(panel);
    PlayFrame.setVisible(true);
}

 public void actionPerformed(ActionEvent e) {

    JButton c = (JButton)e.getSource();
    if (c.equals(slots)){
        new SlotsFrame ();
    }
    else if (c.equals(blackJack)){
        new blackJackFrame ();
    }

 }

}

【问题讨论】:

  • 发布您的第一个代码示例中的整个代码。
  • 什么是blackJackFrame,它是如何被实例化的?
  • 使用JDialog 弹出窗口

标签: java swing getmethod


【解决方案1】:

您尝试访问getBet(),就好像它是使用类“blackJackFrame”的名称的静态方法一样。您需要确定您的 blackJackFrame 实例是否为单例。如果它是单例(每次执行只使用一次),您可以将 getBet() 方法设置为静态,并将您的 Text 组件设置为静态。

不过,更正确的做法是在LoseFrame 的构造函数中添加对blackJackFrame 的引用,然后使用它。

public class LoseFrame extends JFrame {
    JLabel Lost;
    int bet;
    public LoseFrame(blackJackFrame bJFrame){
        super("LoseFrame");
        ...
        Lost = new JLabel("Sorry, you busted and lost $" + bJFrame.getBet());
        ...
    }  
}

创建 LoseFrame 的位置:

如果来自 blackJackFrame:

LoseFrame loseFrame = new LoseFrame(this);

如果来自可以引用 blackJackFrame 对象的其他地方:

 blackJackFrame framename = ...;
 LoseFrame loseFrame = new LoseFrame(framename);

【讨论】:

  • 创建丢帧是指初始化它吗?因为我正在从二十一点框架初始化并打开它。
  • 是的,我的意思是用新的 LostFrame 调用构造函数。 new LoseFrame(this); 应该适合你!
  • 这停止了我得到的错误,在添加了关于 public LoseFrame(blackJackFrame bJFrame){ 和 new LoseFrame(this) 的注释之后,但是当 lossframe 应该出现在屏幕上时,它不是,我只应该添加“new LoseFrame(this);”吗?而不是“ public LoseFrame(blackJackFrame bJFrame){ ”?
  • LoseFrame.java 中将是public LoseFrame(blackJackFrame bJFrame){ 并且还使用Lost = 更改行。在另一个文件中,使用 new LoseFrame(this); 。你有错误吗?此外,请确保 LoseFrame loseFrame 是您在任何地方使用的正确名称。我确定您在某个地方有 .show() 用于您的失败对话。
猜你喜欢
  • 1970-01-01
  • 2016-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多