2013-03-25 2 views
0

JFrame 내에서 고정 크기 400x400의 JPanel을 사용할 수 있기를 원합니다.자바 스윙 JPanel 크기

나는 20px 너비의 경계선을 모두 갖추고 싶습니다.

주된 문제는 크기가 막대하지 않는 코드입니다. JScrollPane runningAni = new JScrollPane (new views.cRunningAnimation ( model));

runningAni.setMaximumSize(new Dimension(400,400)); 

    this.setSize(new Dimension(600,600)); 
    this.add(runningAni,BorderLayout.CENTER);` 

이렇게하면 runningAni 패널이 전체 프레임에 걸쳐 번져납니다.

public void paint(Graphics g) { 

    this.setBackground(new Color(0,255,0)); 
    } 

나는이 내 전체 프레임이 아닌 그 자체가 녹색 페인트 때문에 알고 그냥 JPanel의가 항상 유지됩니다 그래서 패널을 만드는 것 어떻게

(위의 페인트 코드 내 패널하지 프레임입니다) 크기가 같아서 항상 주위에 20px 색상의 테두리가 있습니까?

답변

3

BorderLayout을해야는 크기를 무시합니다. LayoutManager을 설정하여 크기를 고정 크기로 설정하거나 설정된 크기를 고려하도록 설정할 수 있습니다. 이를 허용하는 다른 레이아웃 관리자가 있습니다 (예 : GrindBagLayout 또는 전혀 레이아웃 관리자가 ). 일부는 사용하기 쉽지 않습니다 (예 : GridBagLayout). 사용할 레이아웃은 나머지 레이아웃에 따라 다릅니다.

맞춤 패널이 포함 된 레이아웃 패널을 사용할 수 있습니다. 레이아웃 패널에는 적절한 레이아웃 관리자가 필요하며 BorderLayout의 가운데에 넣을 수 있습니다. 이는 기존 레이아웃 코드를 거의 수정하지 않았다는 것을 의미합니다.

BorderLayout의 전체 요점은 가운데 구성 요소를 중심으로 채우기위한 것입니다.

+0

나는 이것을 +1 좋아한다! 내 Jpanel 주위에 테두리를 설정할 수 어떻게 e..g 테두리 추가 내부에? – LmC

+0

+1, 적절한 레이아웃 관리자를 사용합니다. – camickr

+3

LayoutManager를 사용하지 말아주세요. 제발! –

-1
setPreferredSize() 
setMinimumSize() 
setMaximumSize() 

트릭

+0

나쁜 생각, 잘못된 조언. 그 방법은 잊혀져 야합니다 –

+0

이 답변은 원격으로 정확하지 않습니다. 위에서 언급 한 것처럼 잊어 버릴 필요는 없지만이 방법을 사용할 필요는 드뭅니다. 그들은 가끔 조정을 위해 그들의 용도를 가지고 있습니다. – Michael

1

패널의 색상을 설정하기 위해 paint() 메서드를 재정의하지 마십시오. 사용 :

panel.setBackground(...); 

패널을 만들 때.

어떻게

How to Use Borders를 참조하십시오 내 JPanel의 주위에 테두리를 설정할 수있을 것입니다.

1

레이아웃을 null로 설정하면 JPanel을 추가 할 때의 클래스가 결정됩니다. 그런 다음 setBounds() 메서드를 사용하여 위치와 크기를 설정하십시오! 예를 들어

:

public class Main extends JFrame{ 

     YourPanelClass panel = new YourPanelClass(); 

     public Main(){ 

      // I didn't want to put all the, everyday JFrame methods... 

      setLayout(null); 

      /* 
       First two coordinates indicate the location of JPanel inside JFrame. 
       The seconds set of coordinates set the size of your JPanel. 
       (The first two coordinates, 0 and 0, tell the JPanel to start at the 
        top left of your JFrame.) 
      */ 
      panel.setBounds(0, 0, 100, 100); 

      add(panel); 
     } 
} 

그리고 난 것 크게의 paintComponent() 메소드를 사용하는 것이 좋습니다.

예 : (분명히 JPanel의 클래스에 넣습니다.)

public void paintComponent(Graphics g){ 
    super.paintComponent(g); // don't forget this if you are going to use this method. 

    //Basically this makes your JPanel's background green(I did it this way because I like doing it this way better.) 
    g.setColor(new Color(0, 255, 0)); 
    g.fillRect(0, 0, getWidth(), getHeight()); 
} 

이 도움이 경우 엄지 손가락을 잊지 마십시오!