이 레이아웃에 문제가 있습니다. 세 번째 단추의 크기를 2x2로 만들려면 ?GridBagLayout 구성 요소 배치
두 번째 버튼을 두 열로 늘리려면 어디에서 시작하고 어디서 멈출 지 어떻게 말합니까? 열 1과 2가 열 2와 열 3을 덮고있는 경우의 열을 구분하는 방법을 구별하는 방법은 무엇입니까? 모든
public class SwingExample { public static void main(String[] args) { JFrame theFrame = new JFrame("Grid Bag Example"); theFrame.setSize(600,400); theFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel thePanel = new JPanel(); theFrame.add(thePanel); JButton button1 = new JButton("1"); JButton button2 = new JButton("2"); JButton button3 = new JButton("3"); GridBagLayout gbl = new GridBagLayout(); thePanel.setLayout(gbl); GridBagConstraints gbc = new GridBagConstraints(); gbc.insets = new Insets(10, 10, 10, 10); gbc.gridx = 0; gbc.gridy = 0; thePanel.add(button1,gbc); gbc.gridx = 1; gbc.gridy = 1; thePanel.add(button2,gbc); gbc.gridwidth = 2; gbc.gridheight = 2; gbc.fill = GridBagConstraints.HORIZONTAL; gbc.fill = GridBagConstraints.VERTICAL; gbc.gridx = 3; gbc.gridy = 3; thePanel.add(button3,gbc); theFrame.setVisible(true); } }
답변
먼저 당신은 튜토리얼의 데모 코드를 실행 않았다 ???
더 나은 이해를 위해 자습서 코드를 설명하려고합니다. 두 번째 행에있는 버튼이 세 번째 행의 3 열
- 번째 열에서 시작하여 열 걸쳐 2 : 그것은되도록
gridwidth
제약 사용하는 방법을 보여준다.
GridBagLayout은 먼저 구성 요소가 들어있는 각 열의 너비를 결정해야합니다. 따라서 각 열에 대해 가장 큰 구성 요소가 발견됩니다.
각 열의 가장 큰 구성 요소의 크기를 알았으므로 열 너비를 합하여 행 2와 3의 단추 크기를 결정할 수 있습니다. 2 행의 버튼은 3 열 모두의 너비를 추가합니다. 3 열의 버튼은 마지막 두 열의 너비 만 추가합니다.
그리고 도대체 열 4의 구성 요소는 여러 열을 걸쳐 구성 요소를 원하는 경우 구성 요소 3
의 행동과 스패닝과 함께해야 할 것입니다 후 다른 행에서 구성 요소가 있어야합니다 그 열의 너비를 결정할 수 있습니다. gridwidth = 2
을 사용한다고해서 버튼의 크기가 자동으로 두 배가된다는 의미는 아닙니다.
gbc.gridx = 3; 열 2의 폭이 0
수 있도록
그냥 버튼 3을 가질 수 없습니다보다도 마술 트릭들과 함께 거기에 2 열에서 어떤 구성 요소가 없습니다 열 3에 표시 그 넓이/높이 열/행 크기는 제로가 될 것이다 수단 제로 것이기 때문에 더미 보이지 제로 차원 성분
음는 제로 차원의 요소를 사용할 수 없다. 따라서 크기가있는 더미 구성 요소를 추가 할 수 있습니다. 하여 패널 중 라벨의 추가 및 열/행에 대한 개별 셀을 차지 어떤 구성 요소가 없기 때문에 작동이 중지 볼 밖으로 위의 코드 주석에서
import java.awt.*;
import javax.swing.*;
public class SwingExample {
public static void main(String[] args) {
JFrame theFrame = new JFrame("Grid Bag Example");
theFrame.setSize(600,400);
theFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel thePanel = new JPanel();
theFrame.add(thePanel);
JButton button1 = new JButton("1");
JButton button2 = new JButton("2");
JButton button3 = new JButton("3");
JLabel label1 = new JLabel();
label1.setPreferredSize(button1.getPreferredSize());
JLabel label2 = new JLabel();
label2.setPreferredSize(button1.getPreferredSize());
GridBagLayout gbl = new GridBagLayout();
thePanel.setLayout(gbl);
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(10, 10, 10, 10);
gbc.fill = GridBagConstraints.BOTH;
gbc.gridx = 0;
gbc.gridy = 0;
thePanel.add(button1,gbc);
gbc.gridx = 1;
gbc.gridy = 1;
thePanel.add(button2,gbc);
gbc.gridx = 2;
gbc.gridy = 2;
thePanel.add(label1,gbc); // dummy component
gbc.gridx = 3;
gbc.gridy = 3;
thePanel.add(label2,gbc); // dummy component
gbc.gridx = 2;
gbc.gridy = 2;
gbc.gridwidth = 2;
gbc.gridheight = 2;
thePanel.add(button3,gbc);
theFrame.setVisible(true);
}
}
예를 들면 다음과 같습니다. 그게 gridwidth가 열의 다른 구성 요소와 관련이 있다고 설명했을 때 설명하려고했던 것입니다.
여기에는 실제 그리드가 없습니다. 그리드를 만들지 않고 구성 요소를 던지지 않습니까? 추가 된 구성 요소 만 있습니다. 그런 다음 그리드를 형성하고 상상의 그리드를 통해 조작하려고합니다. – user7381956
그리드에 구성 요소를 추가하여 그리드를 원하는만큼 크게 만듭니다. 그리드의 셀에 구성 요소를 추가하지 않으면 해당 셀의 크기는 (0, 0)입니다. 나는 그것을 더 잘 설명하는 법을 모른다. 이해할 수있는 유일한 방법은 튜토리얼 링크와 위의 코드에서 제시 한 작업 예제를 활용하는 것입니다. – camickr
확인을 시도합니다. 감사. – user7381956
- 1. JPanel 구성 요소 배치
- 2. GridBagLayout : 여러 격자 사각형의 구성 요소
- 3. Silverlight에 구성 요소 배치
- 4. GridBagLayout - 차트 및 레이블 배치
- 5. GridBagLayout 구성 요소가 너비를 무시합니까?
- 6. 배치 구성 요소 스타일 중단
- 7. GridBagLayout allignement
- 8. 자바의 GridBagLayout : 구성 요소 정렬 나는이 <code>GridBagLayout</code>를 사용하여 레이아웃이
- 9. GridBagLayout
- 10. Java GridBagLayout
- 11. SWT 구성 요소 계층 구조 배치
- 12. XAML Grid 구성 요소 배치 문제
- 13. GridBagLayout extends columns
- 14. extjs 4.2.1 - 구성 요소 주위에 배치 컨테이너 배치
- 15. GridBagLayout 지원
- 16. 스윙 GridBagLayout 구성 요소의 구성 요소간에 1px 경계선을 그립니다.
- 17. GridBagLayout 페이지 시작시 구성 요소를 배치하지 않음
- 18. GridBagLayout 구성 요소의 너비가 잘못 표시됩니다.
- 19. GridBagLayout : 지정된 구성 요소를 이동하는 방법
- 20. Java Swing GridBagLayout 다른 구성 요소 사이에 구성 요소를 추가하는 중
- 21. 상위 구성 요소 내부에 구성 요소 렌더링
- 22. GridBagLayout (애플릿)의 정렬
- 23. Java - 중첩 GridBagLayout 레이아웃 관리자
- 24. GridBagLayout 최대 셀 크기
- 25. GridBagLayout 및 ScrollPane
- 26. Java GridBagLayout - 구성 요소를 간격없이 배치하는 방법은 무엇입니까?
- 27. GridBagLayout 관련 문제
- 28. 코코아에서 GridBagLayout
- 29. 일식보기의 GridBagLayout
- 30. GridBagLayout : Swing
gridwidth는 해당 열의 다른 구성 요소를 기준으로합니다. 당신은 단지 3 개의 칼럼 만 가지고 있습니다. 세 번째 열의 유일한 단추이기 때문에 세 번째 단추의 폭을 2로 만들 수 없습니다. 세 번째 버튼을 0 열에 배치하면 첫 번째 두 열의 버튼 너비를 차지할 수 있기 때문에 너비를 2로 지정할 수 있습니다. – camickr
그 문장에 대해 자세히 설명해 주시겠습니까? _gridwidth는 해당 열의 다른 구성 요소와 관련이 있습니다 _. 나는 그것을 이해하지 못한다. [Oracle] (https://docs.oracle.com/javase/8/docs/api/java/awt/GridBagConstraints.html#gridwidth) 명확하게 말합니다. _ 행의 구성 요소 표시 영역에 대한 셀 수를 지정합니다 ._ 아주 평범하고 똑바로 보인다. – user7381956
4 열에 구성 요소가 없으므로 3 열의 구성 요소가 3 열 및 4 열로 확장 될 수 있다고 말할 수 없습니다. 구성 요소가 여러 열을 확장하는 방법에 대한 예를 들었습니다. 자세한 정보 및 작업 예제는 [GridBagLayout 사용 방법 (http://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html)의 스윙 튜토리얼을 참조하십시오. – camickr