过去2天我一直试图解决这个问题!我到处搜索网络,所有的解决方案似乎都没有用。这是我第一次尝试使用Swing。
基本上,当我调用setText()方法时,当我打印出.getText()时,标签的文本会正确更新,但它不会显示在屏幕上?
方法setCard()是我尝试更改文本的地方。 谢谢。任何帮助将不胜感激!
private JPanel contentPane;
private JPanel panel;
private JTextField playerScore;
private JTextField dealerScore;
private JButton dealButton;
private JButton hitButton;
private JButton standButton;
// fields to keep track of what slots are in use
private int playerSlotIndex;
private int dealerSlotIndex;
private JLabel[] pSlot;
private JLabel[] dSlot;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
GUI frame = new GUI();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public GUI() {
playerSlotIndex = 0;
dealerSlotIndex = 0;
pSlot = new JLabel[10];
dSlot = new JLabel[5];
setBackground(new Color(255, 255, 255));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 632, 354);
contentPane = new JPanel();
contentPane.setBackground(new Color(0, 128, 0));
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
dealButton = new JButton("Deal");
hitButton = new JButton("Hit");
hitButton.setEnabled(false);
standButton = new JButton("Stand");
standButton.setEnabled(false);
playerScore = new JTextField();
playerScore.setText("Player: ");
playerScore.setColumns(10);
dealerScore = new JTextField();
dealerScore.setText("Dealer:");
dealerScore.setColumns(10);
panel = new JPanel();
panel.setBackground(new Color(0, 128, 0));
GroupLayout gl_contentPane = new GroupLayout(contentPane);
gl_contentPane.setHorizontalGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPane.createSequentialGroup().addContainerGap()
.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
.addComponent(panel, GroupLayout.DEFAULT_SIZE, 553, Short.MAX_VALUE)
.addGroup(gl_contentPane.createSequentialGroup().addComponent(dealButton)
.addPreferredGap(ComponentPlacement.RELATED).addComponent(hitButton)
.addPreferredGap(ComponentPlacement.RELATED).addComponent(standButton)
.addPreferredGap(ComponentPlacement.RELATED, 202, Short.MAX_VALUE)
.addComponent(dealerScore, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE,
GroupLayout.PREFERRED_SIZE)
.addGap(8).addComponent(playerScore, GroupLayout.PREFERRED_SIZE,
GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)))
.addContainerGap()));
gl_contentPane.setVerticalGroup(gl_contentPane.createParallelGroup(Alignment.TRAILING).addGroup(gl_contentPane
.createSequentialGroup().addContainerGap()
.addComponent(panel, GroupLayout.DEFAULT_SIZE, 253, Short.MAX_VALUE).addGap(18)
.addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE).addComponent(dealButton)
.addComponent(hitButton).addComponent(standButton)
.addComponent(dealerScore, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE,
GroupLayout.PREFERRED_SIZE)
.addComponent(playerScore, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE,
GroupLayout.PREFERRED_SIZE))));
panel.setLayout(null);
JLabel dSlot1 = new JLabel("");
dSlot1.setBounds(10, 5, 46, 60);
panel.add(dSlot1);
dSlot[0] = dSlot1;
JLabel dSlot2 = new JLabel("");
dSlot2.setBounds(66, 5, 46, 60);
panel.add(dSlot2);
dSlot[1] = dSlot2;
JLabel dSlot3 = new JLabel("");
dSlot3.setBounds(122, 5, 46, 60);
panel.add(dSlot3);
dSlot[2] = dSlot3;
JLabel dSlot4 = new JLabel("");
dSlot4.setBounds(178, 5, 46, 60);
panel.add(dSlot4);
dSlot[3] = dSlot4;
JLabel dSlot5 = new JLabel("");
dSlot5.setBounds(234, 5, 46, 60);
panel.add(dSlot5);
dSlot[4] = dSlot5;
JLabel pSlot1 = new JLabel("");
pSlot1.setBounds(10, 143, 46, 60);
panel.add(pSlot1);
pSlot[0] = pSlot1;
JLabel pSlot2 = new JLabel("");
pSlot2.setBounds(66, 143, 46, 60);
panel.add(pSlot2);
pSlot[1] = pSlot2;
JLabel pSlot3 = new JLabel("");
pSlot3.setBounds(122, 143, 46, 60);
panel.add(pSlot3);
pSlot[2] = pSlot3;
JLabel pSlot4 = new JLabel("");
pSlot4.setBounds(178, 143, 46, 60);
panel.add(pSlot4);
pSlot[3] = pSlot4;
JLabel pSlot5 = new JLabel("");
pSlot5.setBounds(234, 143, 46, 60);
panel.add(pSlot5);
pSlot[4] = pSlot5;
JLabel pSlot6 = new JLabel("");
pSlot6.setBounds(290, 143, 46, 60);
panel.add(pSlot6);
pSlot[5] = pSlot6;
JLabel pSlot7 = new JLabel("");
pSlot7.setBounds(346, 143, 46, 60);
panel.add(pSlot7);
pSlot[6] = pSlot7;
JLabel pSlot8 = new JLabel("");
pSlot8.setBounds(402, 143, 46, 60);
panel.add(pSlot8);
pSlot[7] = pSlot8;
JLabel pSlot9 = new JLabel("");
pSlot9.setBounds(458, 143, 46, 60);
panel.add(pSlot9);
pSlot[8] = pSlot9;
JLabel pSlot10 = new JLabel("");
pSlot10.setBounds(514, 143, 46, 60);
panel.add(pSlot10);
pSlot[9] = pSlot10;
contentPane.setLayout(gl_contentPane);
dealButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e) {
if (e.getSource() == dealButton) {
try {
Game game = new Game();
} catch (InvalidMoveException e1) {
e1.printStackTrace();
}
dealEnabled(false);
}
}
});
}
public void setCard(Player p, Card c) throws InvalidMoveException {
if (p.getName().equals("player")) {
pSlot[playerSlotIndex].setText(c.toString());
if (playerSlotIndex < pSlot.length) {
playerSlotIndex++;
}
}
}
public void hitEnabled(boolean b) {
hitButton.setEnabled(b);
}
public void dealEnabled(boolean b) {
dealButton.setEnabled(b);
}
public void standEnabled(boolean b) {
standButton.setEnabled(b);
}
编辑 - 我调用setCard()
的类private Deck deck;
private Player player;
private Player dealer;
public Game() throws InvalidMoveException{
this.deck = new Deck(1,true);
player = new Player("player");
dealer = new Player("dealer");
initialDeal();
}
public void initialDeal() throws InvalidMoveException{
//deal players first 2 cards
dealCard(player, deck.dealNextCard());
dealCard(player, deck.dealNextCard());
//deals dealers first 2 cards
dealCard(dealer, deck.dealNextCard());
dealCard(dealer, deck.dealNextCard());
}
public void dealCard(Player p, Card c) throws InvalidMoveException{
super.setCard(p, c);
p.addCard(c);
}
}