2016-04-24 23 views
0

メインパネルのBorderLayout.SOUTH内にネストされたBorderLayoutを使用して、左下にゲームにJTextFieldを追加します。これはうまくいきますが、ボタンを追加してすぐ隣に行くと、JTextFieldが消えてしまいます。誰かが助けてくれますか?BorderLayout.SOUTHにボタンを追加した後にJavaスイングJTextFieldが消える

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

BorderLayoutのJavadocから抜粋:

各領域が1個以下の成分を含有していてもよい、および対応する定数によって 識別される:NORTHSOUTHEASTWEST、及び CENTER

テキストフィールドとボタンを同じリージョンに追加すると(WEST)、ボタンがテキストフィールドを置き換えます。あなたがpanelBottomためFlowLayoutを使用することができ、問題解決するために

panelBottom.setLayout(new FlowLayout(FlowLayout.LEFT)); 
関連する問題