[英]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
的引用傳遞給另一個類。 這有點不好:
使用觀察者模式 ,允許感興趣的團體向第二類注冊,這樣,當某些事件發生時,第二類可以通知感興趣的團體,然后他們可以根據自己的個人需要采取他們想要采取的行動
這個:
您可能還想看看Model-View-Controller ,它可能會給您更多有關如何構建代碼的想法
我認為一種更好的方法是在Blackjack類中創建一個getter方法,並更新BlackjackGUI類中的標簽(由於它是一個GUI類,因此應該是做GUI東西的類,例如更新標簽)。
另外,您試圖訪問playerMoneyLbl變量,就好像它是靜態變量一樣(BlackjackGUI.playerMoneyLbl),但不是。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.