현재 버튼 클릭시 요소를 동적으로 요소에 추가하는 테스트 함수를 작성하고 있습니다. GridBagLayout
을 사용하고 있습니다. 내 함수의 코드는 다음과 같습니다.GridBagLayout은 요소를 잘못 표시합니다.
public void buildGui(){
ConnectionInfoPanel.removeAll();
//test first group of items
listOfLabels.add(new JLabel("Label 1"));
listOfLabels.add(new JLabel("Label 2"));
listOfLabels.add(new JLabel("Label 3"));
listOfLabels.add(new JLabel("Label 4"));
GridBagConstraints c = new GridBagConstraints();
c.weightx = 1;
c.weighty = 1;
c.insets = new Insets(10,10,10,10);
c.anchor = GridBagConstraints.NORTHWEST;
ConnectionInfoPanel.add(listOfLabels.get(0), c);
ConnectionInfoPanel.add(new JLabel(), c);
ConnectionInfoPanel.add(listOfLabels.get(1), c);
ConnectionInfoPanel.add(new JLabel(), c);
ConnectionInfoPanel.add(listOfLabels.get(2), c);
ConnectionInfoPanel.add(new JLabel(), c);
ConnectionInfoPanel.add(listOfLabels.get(3), c);
ConnectionInfoPanel.add(new JLabel(), c);
//test second group
listOfLabels.add(new JLabel("Label 5"));
listOfLabels.add(new JLabel("Label 6"));
listOfLabels.add(new JLabel("Label 7"));
listOfLabels.add(new JLabel("Label 8"));
GridBagConstraints x = new GridBagConstraints();
x.weightx = 1;
x.weighty = 2;
x.insets = new Insets(10,10,10,10);
// x.anchor = GridBagConstraints.NORTHWEST;
ConnectionInfoPanel.add(listOfLabels.get(4), x);
ConnectionInfoPanel.add(new JLabel(), x);
ConnectionInfoPanel.add(listOfLabels.get(5), x);
ConnectionInfoPanel.add(new JLabel(), x);
ConnectionInfoPanel.add(listOfLabels.get(6), x);
ConnectionInfoPanel.add(new JLabel(), x);
ConnectionInfoPanel.add(listOfLabels.get(7), x);
ConnectionInfoPanel.add(new JLabel(), x);
ConnectionInfoPanel.updateUI();
}
첫 번째 요소 그룹에서는 모든 것이 정상적으로 작동합니다. 그들은 왼쪽 상단 구석 (0,0)에서 선으로 눕습니다.
두 번째 요소 그룹에서 시작 위치는 패널의 중심 (Y 축)과 Label4의 끝 (X 축)이됩니다. 하지만 내가 달성하고자하는 것은 시작 위치를 (0, 1)로 설정하는 것입니다. 따라서이 그룹은 첫 번째 그룹 바로 아래에 표시됩니다. 누구든지 내가 뭘 잘못하고 있는지 보여 줄 수 있니?
이 레이블은 미친 가서 여기 저기를 표시 할 수 있습니다. 나는 불행하게도 나는 요소의 제어를 느슨하게 시도했다. – iColdBeZero
그러나 layoutmanager는 어떻게 든 요소를 넣으려는 위치를 알아야합니다. 두 개의 레이블 세트를 두 개의 flowLayout 패널에 넣은 다음 두 개의 요소로이를 격자판 레이아웃 패널에 추가 할 수도 있습니다. –
내 업데이트 된 답변보기 –