다음 그래프와 같이 패널에 4 개의 구성 요소 A, B, C, D를 배치하고 싶습니다. 이 작업을 수행하기 위해 사용할 수있는 레이아웃 또는 방법은 무엇입니까?Java Swing 이러한 구성 요소를 배치하십시오.
P. A와 D를 평행하게 배치하는 것이 더 쉬운 경우 허용됩니다. 나는 단지 D가 오른쪽과 약간 북쪽이지만 A, B, C가 수직으로 가운데에 위치하기를 바랍니다.
A B C는 정렬되어야합니다. 나는 나쁜 그림을 유감스럽게 느낀다.
다음 그래프와 같이 패널에 4 개의 구성 요소 A, B, C, D를 배치하고 싶습니다. 이 작업을 수행하기 위해 사용할 수있는 레이아웃 또는 방법은 무엇입니까?Java Swing 이러한 구성 요소를 배치하십시오.
P. A와 D를 평행하게 배치하는 것이 더 쉬운 경우 허용됩니다. 나는 단지 D가 오른쪽과 약간 북쪽이지만 A, B, C가 수직으로 가운데에 위치하기를 바랍니다.
A B C는 정렬되어야합니다. 나는 나쁜 그림을 유감스럽게 느낀다.
많은 옵션이 있습니다. 언급 된 다른 사람들처럼 GridBagLayout
네이티브 Java에서 가장 인기 있고 강력한 레이아웃 관리자 중 하나입니다. GroupLayout
을 사용해도 좋지만, 머리를 감싸는 것이 더 어렵습니다 ...하지만 제 3 자 라이브러리를 추가하는 것에 반대하지 않는다면 요즘 대부분의 경우 MigLayout을 사용하고 있습니다. 레이아웃 제약 조건은 문자열이며, 모든 것은 비교적 간단하게 조합 할 수 있습니다.
다음은 간단한 예입니다. 이렇게하면 D 구성 요소가 항상 오른쪽 상단에 있고 A, B, C 구성 요소가 항상 중앙에 있는지 확인합니다. 그것을 실행하고 큰 프레임을 드래그하십시오. D 구성 요소가 항상 패널의 오른쪽 상단에 표시됩니다.
import java.awt.*;
import javax.swing.*;
public class Test {
public Test() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new MyPanel());
frame.pack();
frame.setMinimumSize(frame.getPreferredSize());
frame.setVisible(true);
}
class MyPanel extends JPanel {
public MyPanel() {
JTextField labelA = new JTextField("Your A component");
JTextField labelB = new JTextField("Your B component");
JTextField labelC = new JTextField("Your C component");
JTextField labelD = new JTextField("Top Right D");
JPanel north = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.FIRST_LINE_END;
gbc.weightx = 1;
gbc.insets = new Insets(10, 10, 10, 10);
north.add(labelD, gbc);
JPanel south = new JPanel(new GridBagLayout());
gbc.anchor = GridBagConstraints.CENTER;
gbc.gridy = 0;
south.add(labelA, gbc);
gbc.gridy = 1;
south.add(labelB, gbc);
gbc.gridy = 2;
south.add(labelC, gbc);
setLayout(new BorderLayout());
add(north, BorderLayout.NORTH);
add(south, BorderLayout.CENTER);
}
}
public static void main(String[] args) {
new Test();
}
}
A, B 및 C의 왼쪽 및 오른쪽 가장자리가 의도적으로 정렬되지 않았습니까? – jla
'GridBagLayout'을 사용해보십시오. –
'GridBagLayout'을 위해 제약 조건의 'anchor'를'FIRST_LINE_END'로 설정하고'HORIZONTAL'을 채워 원하는 곳에서 D를 얻습니다. (필요한 경우 예제를 게시 할 수 있습니다.) – Smitty