0

私はブラック ジャック タイプのゲームを作成しており、実際のブラック ジャック フレームから、勝った/負けた金額を言って勝った/負けたときにポップアップする別のフレームに賭け金を渡したいと考えていました。私のコードは次のとおりです。

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 ();
    }

 }

}

4

1 に答える 1

1

getBet()クラス「blackJackFrame」の名前を使用して静的メソッドであるかのようにアクセスしようとしています。blackJackFrameのインスタンスがシングルトンかどうかを判断する必要があります。シングルトンの場合 (実行ごとに 1 回だけ使用する)、getBet()メソッドを静的に設定し、Text コンポーネントを静的に設定することもできます。

blackJackFrameただし、のコンストラクターでyour への参照を追加し、それを使用する方がより正確LoseFrameです。

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);
于 2014-01-17T01:12:49.387 に答える