簡體   English   中英

Java setText JLabel來自另一個類

[英]Java setText JLabel from another class

您好,我有兩個類,一個僅包含我的GUI,另一個包含我的方法。 我需要從Blackjack類的一種方法中更新BlackjackGUI類中的playerMoneyLbl標簽。 我以為我需要先將int轉換為字符串,然后才能將其顯示為標簽,但是我的代碼無法正常工作。 感謝您的幫助。 這是我的代碼:

BlackjackGUI類別

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class BlackjackGUI{

    private JFrame frame;
    private JPanel panel, panelTop, panelBottom, panelCenter, panelHitBtn, panelStandBtn;
    private JButton newGameBtn, dealBtn, hitBtn, standBtn;
    JLabel placeBetLbl, playerMoneyLbl, playerCardLbl, dealerCardLbl, playerCardTotalLbl, dealerCardTotalLbl;
    private JTextField betInputBox;
    private Blackjack Blackjack = new Blackjack();


    Color bg = new Color(0, 100, 0);

    public BlackjackGUI(){
        createForm();

        fillTop();
        fillCenter();
        fillBottom();

        frame.add(panel);
        frame.setVisible(true);
    }

    public void createForm() {
        frame = new JFrame("Blackjack");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(1000,900);

        panel = new JPanel();
        panel.setLayout(new BorderLayout());
        panel.setBackground(bg);

        panelTop = new JPanel();
        panelTop.setBackground(bg);
        panel.add(panelTop, BorderLayout.NORTH);

        panelBottom = new JPanel();
        panelBottom.setBackground(bg);
        panel.add(panelBottom, BorderLayout.SOUTH);

        panelCenter = new JPanel();
        panelCenter.setLayout(new GridLayout(3, 2));
        panelCenter.setBackground(bg);
        panel.add(panelCenter, BorderLayout.CENTER);

    }

    public void fillTop() {

        newGameBtn = new JButton("New Game");
        newGameBtn.setFont(new Font("Gill Sans MT", Font.PLAIN, 16));
        panelTop.add(newGameBtn);
        newGameBtn.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent event) {
                System.exit(0);

            }
        });


    }

    public void fillCenter() {

                ImageIcon defaultDealerCard1 = new ImageIcon("Images/Cards/BACK.png");
                dealerCardLbl = new JLabel();
                dealerCardLbl.setIcon(defaultDealerCard1);
                dealerCardLbl.setHorizontalAlignment(dealerCardLbl.CENTER);
                panelCenter.add(dealerCardLbl);

                dealerCardTotalLbl = new JLabel("5");
                dealerCardTotalLbl.setFont(new Font("Gill Sans MT", Font.PLAIN, 35));
                dealerCardTotalLbl.setForeground(Color.WHITE);
                dealerCardTotalLbl.setHorizontalAlignment(dealerCardTotalLbl.CENTER);
                panelCenter.add(dealerCardTotalLbl);

                ImageIcon defaultPlayerCard1 = new ImageIcon("Images/Cards/BACK.png");
                playerCardLbl = new JLabel();
                playerCardLbl.setIcon(defaultPlayerCard1);
                playerCardLbl.setHorizontalAlignment(playerCardLbl.CENTER);
                panelCenter.add(playerCardLbl);

                playerCardTotalLbl = new JLabel("16 - BUST! You lose :(");
                playerCardTotalLbl.setFont(new Font("Gill Sans MT", Font.PLAIN, 35));
                playerCardTotalLbl.setForeground(Color.WHITE);
                playerCardTotalLbl.setHorizontalAlignment(playerCardTotalLbl.CENTER);
                panelCenter.add(playerCardTotalLbl);

                panelHitBtn = new JPanel();
                panelHitBtn.setLayout(new GridLayout(3, 3));
                panelHitBtn.setBackground(bg);
                panelCenter.add(panelHitBtn);

                panelStandBtn = new JPanel();
                panelStandBtn.setLayout(new GridLayout(3, 3));
                panelStandBtn.setBackground(bg);
                panelCenter.add(panelStandBtn);

                hitBtn = new JButton("Hit");
                hitBtn.setMaximumSize( new Dimension (50,50));
                hitBtn.setHorizontalAlignment(hitBtn.CENTER);
                hitBtn.setVerticalAlignment(hitBtn.CENTER);
                panelHitBtn.add(hitBtn, BorderLayout.CENTER);
                hitBtn.setVisible(false);

                hitBtn = new JButton("Hit");
                hitBtn.setMaximumSize( new Dimension (50,50));
                hitBtn.setHorizontalAlignment(hitBtn.CENTER);
                hitBtn.setVerticalAlignment(hitBtn.CENTER);
                panelHitBtn.add(hitBtn, BorderLayout.CENTER);
                hitBtn.setVisible(false);

                hitBtn = new JButton("Hit");
                hitBtn.setMaximumSize( new Dimension (50,50));
                hitBtn.setHorizontalAlignment(hitBtn.CENTER);
                hitBtn.setVerticalAlignment(hitBtn.CENTER);
                panelHitBtn.add(hitBtn, BorderLayout.CENTER);
                hitBtn.setVisible(false);

                hitBtn = new JButton("Hit");
                hitBtn.setMaximumSize( new Dimension (50,50));
                hitBtn.setHorizontalAlignment(hitBtn.CENTER);
                hitBtn.setVerticalAlignment(hitBtn.CENTER);
                panelHitBtn.add(hitBtn, BorderLayout.CENTER);
                hitBtn.setVisible(false);

                hitBtn = new JButton("HIT"); //KEEP THIS ONE
                hitBtn.setFont(new Font("Gill Sans MT", Font.PLAIN, 35));
                hitBtn.setHorizontalAlignment(hitBtn.CENTER);
                hitBtn.setVerticalAlignment(hitBtn.CENTER);
                panelHitBtn.add(hitBtn, BorderLayout.CENTER);

                hitBtn = new JButton("Hit");
                hitBtn.setMaximumSize( new Dimension (50,50));
                hitBtn.setHorizontalAlignment(hitBtn.CENTER);
                hitBtn.setVerticalAlignment(hitBtn.CENTER);
                panelHitBtn.add(hitBtn, BorderLayout.CENTER);
                hitBtn.setVisible(false);

                hitBtn = new JButton("Hit");
                hitBtn.setMaximumSize( new Dimension (50,50));
                hitBtn.setHorizontalAlignment(hitBtn.CENTER);
                hitBtn.setVerticalAlignment(hitBtn.CENTER);
                panelHitBtn.add(hitBtn, BorderLayout.CENTER);
                hitBtn.setVisible(false);

                hitBtn = new JButton("Hit");
                hitBtn.setMaximumSize( new Dimension (50,50));
                hitBtn.setHorizontalAlignment(hitBtn.CENTER);
                hitBtn.setVerticalAlignment(hitBtn.CENTER);
                panelHitBtn.add(hitBtn, BorderLayout.CENTER);
                hitBtn.setVisible(false);

                hitBtn = new JButton("Hit");
                hitBtn.setMaximumSize( new Dimension (50,50));
                hitBtn.setHorizontalAlignment(hitBtn.CENTER);
                hitBtn.setVerticalAlignment(hitBtn.CENTER);
                panelHitBtn.add(hitBtn, BorderLayout.CENTER);
                hitBtn.setVisible(false);

                standBtn = new JButton("Stand");
                panelStandBtn.add(standBtn);
                standBtn.setVisible(false);

                standBtn = new JButton("Stand");
                panelStandBtn.add(standBtn);
                standBtn.setVisible(false);

                standBtn = new JButton("Stand");
                panelStandBtn.add(standBtn);
                standBtn.setVisible(false);

                standBtn = new JButton("Stand");
                panelStandBtn.add(standBtn);
                standBtn.setVisible(false);

                standBtn = new JButton("STAND");
                standBtn.setFont(new Font("Gill Sans MT", Font.PLAIN, 35));
                panelStandBtn.add(standBtn);

                standBtn = new JButton("Stand");
                panelStandBtn.add(standBtn);
                standBtn.setVisible(false);

                standBtn = new JButton("Stand");
                panelStandBtn.add(standBtn);
                standBtn.setVisible(false);

                standBtn = new JButton("Stand");
                panelStandBtn.add(standBtn);
                standBtn.setVisible(false);

                standBtn = new JButton("Stand");
                panelStandBtn.add(standBtn);
                standBtn.setVisible(false);     

    }

    public void fillBottom() {

        betInputBox = new JTextField("25");
        betInputBox.setFont(new Font("Gill Sans MT", Font.PLAIN, 35));
        betInputBox.setHorizontalAlignment(SwingConstants.RIGHT);
        betInputBox.setPreferredSize(new Dimension(175,50));
        betInputBox.addMouseListener(new MouseAdapter(){
            @Override
            public void mouseClicked(MouseEvent e){
                betInputBox.setText("");
            }
        });
        panelBottom.add(betInputBox, BorderLayout.WEST);

        dealBtn = new JButton("DEAL");
        dealBtn.setFont(new Font("Gill Sans MT", Font.PLAIN, 35));
        panelBottom.add(dealBtn);
        newGameBtn.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent event) {
                System.exit(0);

            }
        });

        placeBetLbl = new JLabel("Place your bets!");
        placeBetLbl.setFont(new Font("Gill Sans MT", Font.PLAIN, 35));
        placeBetLbl.setForeground(Color.YELLOW);
        panelBottom.add(placeBetLbl);

        playerMoneyLbl = new JLabel();
        playerMoneyLbl.setFont(new Font("Gill Sans MT", Font.PLAIN, 35));
        playerMoneyLbl.setForeground(Color.WHITE);
        panelBottom.add(playerMoneyLbl, BorderLayout.EAST);

    }

    public static void main(String[] args) {
    new BlackjackGUI();

    }

}

大酒杯類

public class Blackjack {

    int playerMoney = 2222;
    String playerMoneyString;

    public void process(){
        playerMoneyString = Integer.toString(playerMoney);
        BlackjackGUI.playerMoneyLbl.setText

    }

    public void deal() {
        //deal code goes here.
    }



}

您有許多選擇,有些不錯,有些不好

你可以...

JLabel的引用傳遞給另一個類。 這有點不好:

  • 因為它將UI組件暴露給類
  • 將代碼結合在一起,將來很難管理或更改
  • 將UI組件公開給另一個類,這將使它無需檢查即可對其或其他組件的更改
  • 確實超出了第二類的責任范圍。 它對您在發生變化時想要發生的事情有什么影響?

你可以...

使用觀察者模式 ,允許感興趣的團體向第二類注冊,這樣,當某些事件發生時,第二類可以通知感興趣的團體,然后他們可以根據自己的個人需要采取他們想要采取的行動

這個:

  • 解耦代碼,因為沒有代碼可以相互依賴,因此將來更容易更改和修改代碼
  • 定義並區分班級的職責范圍

您可能還想看看Model-View-Controller ,它可能會給您更多有關如何構建代碼的想法

我認為一種更好的方法是在Blackjack類中創建一個getter方法,並更新BlackjackGUI類中的標簽(由於它是一個GUI類,因此應該是做GUI東西的類,例如更新標簽)。

另外,您試圖訪問playerMoneyLbl變量,就好像它是靜態變量一樣(BlackjackGUI.playerMoneyLbl),但不是。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM