2016-04-24 64 views
0

我在我的主面板的BorderLayout.SOUTH中使用嵌套的BorderLayout在左下角添加了一個JTextField。這工作正常,但後來當我添加一個按鈕去旁邊,我的JTextField消失。有人可以幫忙嗎?從BorderLayout的JavadocJava swing JTextField在爲BorderLayout.SOUTH添加一個按鈕之後消失了

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

public class BlackjackGUI{ 

    private JFrame frame; 
    private JPanel panel, panelLeft, panelBottom; 
    private JButton newGameBtn, dealBtn, hitBtn, standBtn; 
    private JLabel placeBetLbl, playerMoneyLbl; 
    private JLabel playerCard1Lbl, playerCard2Lbl, playerCard3Lbl, 
        playerCard4Lbl, playerCard5Lbl, playerCard6Lbl, playerCard7Lbl; 
    private JLabel dealerCard1Lbl, dealerCard2Lbl, dealerCard3Lbl, dealerCard4Lbl, 
        dealerCard5Lbl, dealerCard6Lbl, dealerCard7Lbl; 
    private JLabel playerCardValueLbl, dealerCardValueLbl; 
    private JLabel spacer1, spacer2; 
    private JTextField betInputBox; 

    public BlackjackGUI(){ 
     createForm(); 

     addTextField(); 
     addButtons(); 
     addLabels(); 


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

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

     panel = new JPanel(); 
     panel.setLayout(new BorderLayout()); 
     Color c = new Color(0, 100, 0); 
     panel.setBackground(c); 


     panelLeft = new JPanel(); 
     Color panelLeftBG = new Color (23, 25, 100); 
     panelLeft.setBackground(panelLeftBG); 
     panel.add(panelLeft, BorderLayout.WEST); 

     panelBottom = new JPanel(); 
     Color panelBottomBG = new Color (56, 12, 10); 
     panelBottom.setBackground(panelBottomBG); 
     panelBottom.setLayout(new BorderLayout()); 
     panel.add(panelBottom, BorderLayout.SOUTH); 


    } 

    public void addButtons() { 

     newGameBtn = new JButton("New Game"); 

     panelLeft.add(newGameBtn, BorderLayout.WEST); 
     newGameBtn.addActionListener(new ActionListener() { 

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

      } 
     }); 

     dealBtn = new JButton("Deal"); 
     dealBtn.setPreferredSize(new Dimension (100, 50)); 
     panelBottom.add(dealBtn, BorderLayout.WEST); 
     newGameBtn.addActionListener(new ActionListener() { 

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

      } 
     }); 

    } 

    public void addTextField() { 

     betInputBox = new JTextField("£25.00"); 
     betInputBox.setFont(new Font("Gill Sans MT", Font.PLAIN, 35)); 
     betInputBox.setHorizontalAlignment(SwingConstants.RIGHT); 
     betInputBox.setPreferredSize(new Dimension(175,50)); 
     panelBottom.add(betInputBox, BorderLayout.WEST); 
    } 

    public void addLabels() { 

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

     playerMoneyLbl = new JLabel("£2,500"); 
     playerMoneyLbl.setFont(new Font("Gill Sans MT", Font.PLAIN, 35)); 

     panelBottom.add(playerMoneyLbl, BorderLayout.EAST); 



    } 

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

    } 

} 

回答

1

摘錄:

每個區域可包含不超過一個部件,並通過相應的常數確定 :NORTHSOUTHEASTWEST,和 CENTER

您是第一次添加文本字段,然後按鈕到相同的區域(WEST),因此按鈕只是替換文本字段。

爲了解決您可以使用FlowLayoutpanelBottom問題:

panelBottom.setLayout(new FlowLayout(FlowLayout.LEFT));