2010-06-14 2 views
4

저는 여유 시간에 모노 폴리스의 Java 버전을 만들고 스윙에 대한 레이아웃을 이해하는 데 어려움을 겪고 있습니다.GridBagLayout으로 모노 폴리 보드 만들기

게시판에있는 각 공백은 본질적으로 사용자 지정 JButton이며 프레임 가장자리 (예 : 독점 보드 자체)에 배치하려고 시도했습니다. 레이아웃 시스템이 어떻게 작동하는지에 대한 유용한 설명을 찾지 못해서 그렇게하는 데 어려움이 있습니다.

누군가가 프레임의 가장자리에 단추를 배치하는 방법을 보여줄 수 있습니까? 다른 레이아웃을 사용해야합니까?

+0

투표 해 주셔서 감사합니다. 희망을 도왔습니다. – jjnguy

답변

3

이것은 BorderLayout으로 가장 잘 작동하는 것으로 보입니다. JButton을 모두 포함하는 4 JPanel을 만드는 것이 좋습니다.

그런 다음 BorderLayout.North, South, EastWestJPanels를 추가합니다.

아마 내가 버튼을 배치하는 가장 쉬운 방법 인 것 같습니다.

HereBorderLayout을 사용하기에 가장 적합한 장소입니다.

방금 ​​레이아웃을 시작하는 데 도움이되는 몇 가지 코드를 모았습니다. 컴파일되지 않았습니다.

int boardWidth; 
int boardHeight; 
int boardSquareHeight; 
int boardSqusreWidth; 
JPanel north = new JPanel(); 
JPanel south = new JPanel(); 
Dimension northSouthD = new Dimension(boardWidth, boardSquareHeight); 
north.setPreferedSize(northSouthD); 
south.setPreferedSize(northSouthD); 
JPanel east = new JPanel(); 
JPanel west = new JPanel(); 
Dimension eastWestD = new Dimension(boardSquareHeight, boardHeight - 2 * boardSquaareWidth); 
east.setPreferedSize(easWestD); 
west.setPreferedSize(easWestD); 
// add all of the buttons to the appropriate JPanel 
parentPanel.setLayoutManager(new BorderLayout()); 
parentPanel.add(north, BorderLayour.NORTH); 
... 
+0

정말 고마워요.이것은 이러한 것들이 실제로 잘 작동하는 방식을 설명해주었습니다. – seadowg

+0

@Oetzi 환영합니다. – jjnguy

0

"내부"셀을 비워두면 표준 GridLayout이 트릭을 수행 할 수 있습니다.

+0

나는 이것이 가능하다는 것을 몰랐다. 어떻게 세포를 비워 두는가? – seadowg

+0

'new JPanel()'또는'new JLabel()'빈 컨테이너를 추가하기 만하면 – Jack

+0

Empty가 표시됩니까? 내 독점권 판에 있지 않아. 무료 주차 공간, 커뮤니티 가슴 및 다른 카드 - 그것들은 보드 중간에 있습니다. – duffymo

0

당신은 생각할 수 넷빈즈 같은에서 레이아웃을 디자인 한 다음 자동 (당신이 구축 디자인에서 간격을 생성) 바로 자동 코드 생성 및 복사, 자신의 보드를 배치하는 코드를 생성 사용할 수 있습니다 자리 표시 자로 사용한 요소가 아닌 사용자 지정 단추로 대체 할 수 있습니다.

스윙을 이해하도록하기보다는 상대적인 간격을 기준으로 원하는 곳에 정확히 배치 할 수 있습니다.

1

이미 답변을 받았지만 GridLayout의 작동 방식을 살펴보아야한다고 생각했습니다. 먼저 http://java.sun.com/docs/books/tutorial/uiswing/layout/gridbag.htmlhttp://www.cs.ubc.ca/local/computing/software/jdk-1.5.0/docs/api/java/awt/GridBagConstraints.html을 사용하면 길고 비밀스러운 찾는 방법 서명을 해독하는 데 도움이됩니다.

이 독점 보드 예제에는 세 가지 주요 부분이 있습니다. 레이아웃 설정, JPanels로 Large Middle Piece 추가, JPanels로 외부 사각형 추가 등이 있습니다.

public class GridBagLayoutExample extends JFrame { 

public static void main(String[] args) { 
    new GridBagLayoutExample().setVisible(true); 
} 

public GridBagLayoutExample() { 

    try { 
     //Setup the Layout 
     setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 
     GridBagLayout thisLayout = new GridBagLayout(); 
     thisLayout.rowWeights = new double[] { 0.2, 0.1, 0.1, 0.1, 0.1, 
       0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.2 }; 
     thisLayout.columnWeights = new double[] { 0.2, 0.1, 0.1, 0.1, 0.1, 
       0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.2 }; 
     getContentPane().setLayout(thisLayout); 

     //Default Grid values 
     int gridX = 0; 
     int gridY = 0; 
     //Add Panels for Each of the four sides 
     for (int j = 0; j < 4; j++) { 
      for (int i = 0; i < 13; i++) { 
       JPanel tempPanel = new JPanel(); 
       switch(j) 
       { 
       case 0://Top Spaces 
        gridX = i; 
        gridY = 0; 
        break; 
       case 1://Left Spaces 
        gridX = 0; 
        gridY = i; 
        break; 
       case 2://Right Spaces 
        gridX = 12; 
        gridY = i; 
        break; 
       case 3://Bottom Spaces 
        gridX = i; 
        gridY = 12; 
        break; 
       } 
       getContentPane().add(tempPanel, 
         new GridBagConstraints(gridX,// XGridSpot 
           gridY,// YGridSpot 
           1,// XGridSpaces 
           1,// YGridSpaces 
           0.0, 0.0, GridBagConstraints.CENTER, 
           GridBagConstraints.BOTH,//Fill 
           new Insets(0, 0, 0, 0), 0, 0)); 
       tempPanel.setBorder(BorderFactory 
         .createLineBorder(Color.BLACK)); 

      } 
     } 

     {// Main Inner Area Notice Starts at (1,1) and takes up 11x11 
      JPanel innerPanel = new JPanel(); 
      getContentPane().add(
        innerPanel, 
        new GridBagConstraints(1, 
          1, 
          11, 
          11, 
          0.0, 0.0, 
          GridBagConstraints.CENTER, 
          GridBagConstraints.BOTH, 
          new Insets(0, 0, 0, 0), 0, 0)); 
     } 
     pack(); 
     setSize(260, 260); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

} 

여기에서 패널을 고정하는 구조를 추가 한 다음 버튼과 원하는 패널을 각각 추가 할 수 있습니다. 버튼이 패널 대신 작동합니다. 이것은 올바른 수입과 함께 컴파일해야하므로 컴파일하고 시험해보십시오.

+0

좋은 예입니다. 너무 늦었 어. ': (' – jjnguy

관련 문제