다음 코드는 요청한 것과 정확히 일치합니다.
프로그램에는 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
)
크로스 포스팅 것 같은데 : http://www.coderanch.com/t/606655/GUI/java/Swing-FlowLayout- BorderLayout. 웃기는 당신이 같은 대답을 얻는 방법. – camickr