2013-03-06 3 views
2

FlowLayout을 넣고 싶습니다. 북쪽 패널 (BorderLayout.NORTH)으로 BorderLayout 안에 5 개의 레이블을 넣을 수 있습니다. 창/프레임의 크기를 조정할 때 레이블이 사라지지 않고 대신 새 줄로 이동하려고합니다.크기를 조정할 때 FlowLayout의 위치를 ​​변경하는 방법.

저는 min, max values ​​및 preferredLayoutSize 메소드에 대해 읽었습니다. 그러나 그들은 도움이되지 않는 것처럼 보이고 나는 여전히 혼란 스럽습니다.

또한 래퍼 또는 다른 레이아웃과 같은 다른 레이아웃을 사용하고 싶지 않습니다.

+0

크로스 포스팅 것 같은데 : http://www.coderanch.com/t/606655/GUI/java/Swing-FlowLayout- BorderLayout. 웃기는 당신이 같은 대답을 얻는 방법. – camickr

답변

0

다음 코드는 요청한 것과 정확히 일치합니다.

프로그램에는 contentPane이 BorderLayout으로 설정된 프레임이 있습니다. 이 패널에는 흐름 레이아웃이 있고 BorderLayout.NORTH에 추가 된 다른 패널 flowPanel이 들어 있습니다.

import java.awt.BorderLayout; 
import java.awt.FlowLayout; 
import java.awt.event.ComponentAdapter; 
import java.awt.event.ComponentEvent; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 

public class PanelFun extends JFrame { 
    final JPanel flowPanel; 

    public PanelFun() { 
     setPreferredSize(new Dimension(300,300)); 
     getContentPane().setLayout(new BorderLayout()); 
     flowPanel = new JPanel(new FlowLayout()); 
     addLabels(); 
     getContentPane().add(flowPanel, BorderLayout.NORTH); 


     addComponentListener(new ComponentAdapter() { 

      @Override 
      public void componentResized(ComponentEvent e) { 
       PanelFun.this.getContentPane().remove(flowPanel); //this statement is really optional. 
       PanelFun.this.getContentPane().add(flowPanel); 
      } 
     }); 
    } 

    void addLabels(){ 
     flowPanel.add(new JLabel("One")); 
     flowPanel.add(new JLabel("Two")); 
     flowPanel.add(new JLabel("Three")); 
     flowPanel.add(new JLabel("Four")); 
     flowPanel.add(new JLabel("Five")); 
    } 



    public static void main(String[] args) { 
     final PanelFun frame = new PanelFun(); 
     frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     frame.pack(); 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       frame.setVisible(true); 

      } 
     }); 
    } 
} 
그래서, 어떻게 작동합니까

? 당신이 Swing에 새로운 및 코드의 일부를 이해하지 않는 경우 알려줘 :

는 프레임 크기를 조정할 flowPanel 재정비 내부의 구성 요소를 가진 열쇠는

PS 코드의 조각이다. 그것을 포함하는 프레임의 크기가 변경 될 때 부품의 위치를 ​​변경 정상 동작하지 그대로 flowPanel는 그 구성 요소를 재정렬되지 않고 코드

addComponentListener(new ComponentAdapter() { 

       @Override 
       public void componentResized(ComponentEvent e) { 
        PanelFun.this.getContentPane().remove(flowPanel); 
        PanelFun.this.getContentPane().add(flowPanel); 
       } 
      }); 

.

그러나 패널에 flowPanel이 추가되면 사용 가능한 공간에 따라 구성 요소의 위치가 지정되는 것도 해당 동작입니다. 따라서 프레임 크기가 조정될 때마다 flowPanel을 추가하면 내부 요소의 위치가 변경되어 사용 가능한 공간이 사용됩니다.

업데이트 : camickr 올바르게 지적

이이 방법을 사용하여 센터 FlowLayout에 대한 짜증나는 것들 (BorderLayout.CENTER)

+1

-1, 이것은 BorderLayout의 CENTER에 구성 요소를 추가하지 않았기 때문에 작동합니다. – camickr

+0

@camickr 그 점을 지적 해 주셔서 감사합니다. 나는 그것을 깨닫지 못했다. – Ankit

+0

@camickr 또 다른 메모에서 (사이트 이름으로 가정) 실제로'WrapLayout'을 작성한 사람입니까? – Ankit

6

하나에 무엇을 추가 할 경우 작동하지 않습니다은 '아무튼이다 사용 가능한 가로 공간이 작 으면 내용을 "감 쌉니다".

대신 WrapLayout에서 봐, 그것은 ... 포장과 FlowLayout

관련 문제