2016-09-01 2 views
2

버튼 그리드가있는 JPanel을 포함하는 JFrame을 생성합니다. 모든 것이 정상적으로 작동하지만 버튼 패널 위에 JLabel을 추가하고 싶지만 레이블은 나타나지 않습니다. 비록 BoxLayout을 사용하지 않으면 나타납니다. 어떤 도움을 주셔서 감사합니다.BoxLayout을 사용하는 JFrame에 JLabel 추가하기

아래의 첫 번째 코드 부분은 아래 코드는

import java.awt.Dimension; 
import java.awt.GridLayout; 
import javax.swing.JButton; 
import javax.swing.JPanel; 

public class Panel extends JPanel { 
    private static final long serialVersionUID = 2L; 

    private int i; 

    JButton[] button = new JButton[9]; 
    GridLayout layout = new GridLayout(3, 3); 
    Dimension dim = new Dimension(500, 500); 

    public Panel() { 

     for (i = 0; i<9; i++) { 
      button[i] = new JButton(); 
      add(button[i]); 
     } 
     setPreferredSize(dim); 
     setMinimumSize(dim); 
     setMaximumSize(dim); 
     setLayout(layout); 
    } 
} 

아래의 마지막 코드 부분은 메인 클래스

public class RunGame { 

    public static void main(String[] args) { 
     new Frame(); 
    } 
} 
입니다 버튼 내 JPanel의 클래스 내 JFrame의 클래스

import java.awt.Dimension; 
import javax.swing.Box; 
import javax.swing.BoxLayout; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

public class Frame extends JFrame { 
    private static final long serialVersionUID = 1L; 

    Panel panel = new Panel(); 
    Dimension frameDim = new Dimension(1000, 1000); 
    Dimension labelDim = new Dimension(100, 20); 
    Box box = new Box(BoxLayout.Y_AXIS); 
    JLabel label = new JLabel("Tic Tac Toe"); 
    JPanel pane = new JPanel(); 

    public Frame() { 

     pane.add(label); 
     pane.setPreferredSize(labelDim); 
     pane.setMinimumSize(labelDim); 
     add(pane); 
     box.add(Box.createVerticalGlue()); 
     box.add(panel);  
     box.add(Box.createVerticalGlue()); 
     add(box); 
     setTitle("Tic Tac Toe"); 
     setSize(frameDim); 
     setMinimumSize(frameDim); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setLocationRelativeTo(null); 
     setVisible(true); 
    } 
} 

입니다

+0

나는이 웹 사이트 및 더욱 많은 것에 응답을위한 긴 시간을 찾았다. 또한 일부 사용자와 채팅을했지만 답변을 찾지 못했습니다. 어떤 도움을 주셔서 감사합니다. – LAD

+0

텍스트 필드 전체를 가로 질러 스트레칭하려면 다른 패널에 있어야합니다. 아마도 "상자 패널"과 "텍스트 필드 패널"을 보유하는 "기본 패널"을 만들 수 있습니다. "기본 패널"에 수직 FlowLayout을 부여 하시겠습니까? – byxor

+0

'Frame.panel'은 어디에도 사용되고 있지 않습니다 (적어도이 예제에서는). 신경 쓰지 마세요. 상자에 추가되었습니다. 하지만 왜? – byxor

답변

0

프레임으로 레이블을 창에 추가하고 해당 상자를 제거 할 때 BorderLayout을 사용할 수 있습니다

public Frame() 
    { 
    //create label and add it to the frame 
    JLabel label = new JLabel("Tic Tac Toe"); 
    label.setHorizontalAlignment(JLabel.CENTER); 
    add(label, BorderLayout.NORTH); 

    //create buttonsPanel and add it to the frame 
    JPanel buttons = new JPanel(); 
    buttons.setLayout(new GridLayout(3, 3)); 
    for (int i = 0; i < 9; i++) 
    { 
     buttons.add(new JButton(""+i)); 
    } 
    add(buttons, BorderLayout.CENTER); 

    //setup the title, other properties for the frame etc.. 
    setTitle("Tic Tac Toe"); 
    setSize(1000, 1000); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    setLocationRelativeTo(null); 
    setVisible(true); 
    } 

희망을 다음과 같이이 더 나은 :이 라벨이 JFrame에 직접 추가하고

+0

작동하는 것처럼 보이지만 시도해 볼 때 위와 아래가 아니라 레이블과 격자가 나란히 표시됩니다. – LAD

+0

위의 코드를 편집하여 완벽하게 작동하는 예제를 보여주었습니다.하지만 물론 클래스를 지정하고 확장해야 할 필요가 있습니다. – Techno1212

+0

내가 찾던 것과 비슷하지만 유일한 차이점은 내가 원하는 것입니다. 버튼 그리드가 작아서 옆면에 공간이 생깁니다. 그래도 포스트에 감사드립니다! – LAD

3
add(box); 

이 콘텐츠 창하는의 BorderLayout을 사용하여 배치되어 있습니다. 제한없이 테두리 레이아웃에 구성 요소를 추가 할 때 기본값은 CENTER이며 단일 구성 요소 만 표시 할 수 있습니다. 그것을 고치기 위하여 사용하십시오 :

pane.add(box); 
+0

앤드류 (Andrew)에게 답변을 쓸 시간을 보내 주셔서 감사합니다. – LAD

관련 문제