여기에 크기가 조정됩니다 너희들 힘든 일 : JScrollPane의 무작위
은 기본적으로 내가 2 열이있는 GridBagLayout에있는 것입니다 : 각각의 스크롤에 싸여 목록은. 스크롤 팬은 BOTH 방향으로 늘어납니다. 나는 점진적으로 (윈도우의 가장자리를 드래그하여)이 패널의 높이를 줄일 경우, 내가 볼 "임의의"스크롤 구획에서 일어나는 크기 조정 : 최초의이 hscroll 줄이
을 나타날 때초 하나의 폭이 감소됩니다 다음, 두 번째의 폭이 아무 이유없이 다시 수축됩니다
...
난 내 구성 요소를 포장하지 않는 경우,이 behavi을하지 않습니다 또는. 당신이 나무과 오른쪽 목록을 대체하는 경우
, 그것은 다르게 동작합니다 : 를 윈도우의 높이가 380-ICH 픽셀 노호, 나무는 크기가 조정됩니다 축소 ...
만약 내가 돈 내 구성 요소를 래핑하지 않으면 창의 크기를 계속 유지하면 나무 크기가 조정됩니다!
너희들은 무슨 일이 일어나고 있는지 알 수 있니?
추신 : 빌드하려고하는 실제 레이아웃은이 예제보다 더 복잡합니다. 다음, 당신을 anchor
을 정의 그 동안 내가 원하는 것을 할 SpringLayout에를 사용하지만이 GridBagLayout의 기본 원칙입니다
protected static ListModel newListModel(int n) {
DefaultListModel lm = new DefaultListModel();
for (int i = 0; i < n; ++i)
lm.addElement("AAA");
return lm;
}
protected static JComponent createContentPane() {
JPanel pane = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.CENTER;
gbc.fill = GridBagConstraints.BOTH;
gbc.weightx = 1;
gbc.weighty = 1;
gbc.gridy = 0;
gbc.gridx = 0;
pane.add(new JScrollPane(new JList(newListModel(12))), gbc);
++gbc.gridx;
pane.add(new JScrollPane(new JList(newListModel(4))), gbc);
return pane;
}
public static void main(String[] args) {
JFrame f = new JFrame();
f.getContentPane().add(createContentPane());
f.setSize(800, 400);
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
f.setVisible(true);
}
내 예제에서는 앵커가 설정되어 있습니다. 내가 센터를 선택 하든지 아니면 어떤 코너 (북서쪽)를 선택하든이 문제는 여전히 발생합니다. 내 예에서는 최종 버전의 모든 내용이 표시되지 않습니다. 나는 그 글을 위해 그것을 단순화했다. 실제로는 좀 더 복잡합니다. – Jordan
@Jordan은 적절한 LayoutManager를 사용합니다. GridBagLayout은 대부분의 compex LayoutManager이며 가능한 모든 매개 변수를 허용합니다. BoxLayout 또는 BorderLayout을 suply하고 싶습니다. 둘 중 하나를 선택하는 것이 좋습니다. – mKorbel