2014-12-04 5 views
0

레이아웃 관리자를 사용하여 간단한 카드 디스플레이 프로그램을 만들려고했지만 레이아웃 관리자를 제대로 사용하지 못했습니다. 여기에 내 코드가 있는데, contentPane의 레이아웃 관리자로 BorderLayout();, buttonPanel의 경우 GridLayout();, cardPanel의 경우 CardLayout();, labelPanel의 경우 FlowLayout();을 사용합니다.레이아웃 관리자 사용

public class TestClass // implements ActionListener 
{ 
    static JPanel content = new JPanel(new BorderLayout()); 
    static JPanel cardPanel = new JPanel(); 
    static CardLayout cardLayout; 
    static JPanel buttonPanel = new JPanel(new FlowLayout()); 
    static JPanel labelPanel = new JPanel(new GridLayout(9,1)); 
    static JButton jack, king, queen, ace; 
    static JButton first, last, prev, next; 

    public static void main(String[] args) { 
     JFrame window = new JFrame("Window"); 

     //------Creates the Label Panel --// 
     JLabel label = new JLabel("SELECT A CARD"); 
     label.setFont(new Font("Georgia",Font.BOLD,18)); 
     labelPanel.add(label, FlowLayout.LEFT); 

     //-----Creates the Button Panel --// 
     jack = new JButton("Jack"); 
     queen = new JButton("Queen"); 
     king = new JButton("King"); 
     ace = new JButton("Ace"); 
     first = new JButton("First"); 
     last = new JButton("Last"); 
     prev = new JButton("Previous"); 
     next = new JButton("Next"); 
     JLabel sep = new JLabel("-------"); 
     buttonPanel.add(jack); 
     buttonPanel.add(queen); 
     buttonPanel.add(king); 
     buttonPanel.add(ace); 
     buttonPanel.add(sep); 
     buttonPanel.add(first); 
     buttonPanel.add(last); 
     buttonPanel.add(prev); 
     buttonPanel.add(next); 

     //-------Creates the cardPanel --// 
     JLabel card1 = new JLabel("JACK"); 
     JLabel card2 = new JLabel("QUEEN"); 
     JLabel card3 = new JLabel("KING"); 
     JLabel card4 = new JLabel("ACE"); 
     cardPanel.add(card1, "jack"); 
     cardPanel.add(card2, "queen"); 
     cardPanel.add(card3, "king"); 
     cardPanel.add(card4, "ace"); 
     cardPanel.setLayout(cardLayout = new CardLayout()); 
     cardLayout.first(cardPanel); 

     // ----- Adds the panels to the contentPane ---// 
     content.add(labelPanel, BorderLayout.NORTH); 
     content.add(buttonPanel, BorderLayout.WEST); 
     content.add(cardPanel, BorderLayout.CENTER); 

     window.setContentPane(content); 
     window.setLocation(300,100); 
     window.pack(); 
     window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     window.setVisible(true); 
     window.setResizable(true); 
    } 
} 

그러나 예상대로 출력되지 않습니다. 왼쪽 위의 레이블, 왼쪽의 단추 (그리드를 사용하여 배치 한), 그리고 중앙의 cardLabel을 원합니다.

편집 : 문제 해결, 당신의 그리드 레이아웃 (labelPanel)에있는 유일한 것은 이것이다 바보 같은 실수

static JPanel buttonPanel = new JPanel(new GridLayout(9,1)); //previously FlowLayout 
    static JPanel labelPanel = new JPanel(new FlowLayout()); //previously GridLayout 

답변

1

을했다 :

JLabel label = new JLabel("SELECT A CARD"); 

모든 그 밖에을 인 buttonPanel에 흐름 레이아웃.

에 체크 아웃 : https://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html

+0

입력 주셔서 감사하지만 난 .... 그것을 가지고 여기에 정적 JPanel의 buttonPanel = 새로운 JPanel의를 바보 같은 실수를 (새 GridLayout과 (9,1)); // 이전에 FlowLayout(); 정적 JPanel labelPanel = 새 JPanel (새 FlowLayout()); // 이전 GridLayout (9,1) –

+0

우리 모두는 어리석은 실수를 저지른다. 너는 그것을 고쳤다 고 했니? –

+0

확실히 선생님, 나는 처음에 내 psedocode에 쓴 것처럼 gridlayout 대신 버튼 패널에 flowlayout을 사용하고있었습니다. 그것의 우스운 방법 나는 그것을 발견하지 않았다. 감사합니다 –