2013-09-25 4 views
0

나는 피곤했지만, 아래의 코드에서 거의 마지막 세 줄에 멈추기 만하면 내 tictactoe 패널에서 "새로 고침"버튼을 만들 수있다. 레이아웃 관리자를 단일 컨테이너에 혼합합니다.gridlayout과 borderlayout을 섞음

하지만 작동했습니다.

ButtonPanel.setLayout(new GridLayout(3, 3));  
guiFrame.add(ButtonPanel); 
for (int i = 0; i < 3; i++) { 
    for (int j = 0; j < 3; j++) { 
    button[i][j] = addButton(ButtonPanel, i, j); 
    } 
} 

JButton refreshbutton = new JButton("Refresh"); 
guiFrame.add(refreshbutton, BorderLayout.SOUTH); // ... border layout worked. Hm. 
refreshbutton.addActionListener(this); 

guiFrame.setVisible(true); } 

놀랄까요? (마음에 내 newbieness을 유지합니다.)

(BOY을, 나는이 바보 게임의 프로그램을 작성에 분차 물건에 걸려 넘어/배웠습니까! - 예를 들어, 내부적으로 각 버튼을 setActionCommand에 "라벨"을 사용하여 [ 11,12,13,21로 ... 33] 그래서 ONE actionPerformed 방법은 제대로의는 그것이 돌려 누구에 의해 추진되었다 어떤 버튼 X 또는 O]와 [레이블을 getActionCommand을 사용할 수 있습니다.)

+1

변수 이름은 대문자로 시작하면 안됩니다. 'ButtonPanel'은'buttonPanel'이어야합니다. – camickr

+2

또한 나중에 BorderLayout.SOUTH를 BorderLayout.PAGE_END로 참조하십시오. JDK 1.4 이후로 후자를 선호하기 때문에 :-) [BorderLayout Tutorials] (http : // docs. __Launch Button 바로 아래 : -) __ 또한 guiFrame.pack()을 visible로 설정하기 직전과 모든 컴포넌트를 추가 한 후에 실패했습니다 스윙에서 코딩 할 때, 많은 경우에 불쾌한 행동으로 이어지는 아주 일반적인 실수입니다. __ (작은 공간에서 딱딱하게 말하기) : –

답변

2

guiFrame합니다. add (refreshbutton, BorderLayout.SOUTH); // ... 테두리 레이아웃이 작동했습니다. 흠.

BorderLayout을 사용했기 때문에 .SOUTH는 패널을 BorderLayout으로 만들지 않습니다. JFrame (JDialog)의 내용 창에 대한 기본 레이아웃 관리자가 BorderLayout이므로 코드가 작동했습니다. 따라서 기본 레이아웃을 활용하는 것입니다.

단일 컨테이너에 레이아웃 관리자가 혼합되어 있기 때문에.

네, 이것은 일반적인 관행입니다. 실제로 GUI에 추가하는 다른 패널에서 다른 레이아웃 관리자를 사용하지 않으면 합리적으로 복잡한 GUI를 만드는 것이 거의 불가능합니다.

+0

Netbeans에서 "pack()"을 보았습니다. 생성 된 코드; 그것에 대해 읽지 않았다. 추가 할 것입니다. – DSlomer64

+0

방금 ​​pack()을 추가했는데 pack()이하는 것처럼 tictactoe grid가 아주 작습니다. 이제는 원하는 크기와 그 밖의 것들을 엉망으로 만들어야 할 것 같지만, 독서를 통해 더 좋은 것이 나올 때까지 팩을 제거 할 것입니다 .- 방금 setMinimumSize에 대해 읽었지만, Dimension은 ....... – DSlomer64

+0

OK입니다. 다음 두 행을 추가했습니다. Dimension dim = new Dimension (300, 300); guiFrame.setMinimumSize (dim); 모두 괜찮습니다. makin '을 주셔서 감사합니다. pack()과 Dimension에 대한 나의 의지를 배웁니다! – DSlomer64