GridBagLayout
에 4 열이있는이 JFrame
에는 갈색 줄이 열 1과 2 사이의 제한이어야하며 확인 및 취소 버튼이이 한도의 각면에 있어야합니다.GridBagLayout : gridwidth가 1보다 큰 경우의 맞춤과 너비
문제점 :
- OK + 세트 취소는 다른 버튼을 중심 아니다.
- 왼쪽 및 오른쪽
JTextArea
의 너비가 동일하지 않습니다.
열 1은 열 1과 2가 같을 것으로 예상 될 때 너비가 0 인 것으로 보입니다.
사용되는 코드 : 만 테스트에 대한
import java.awt.Component;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
public class GblSO extends JFrame {
// Instance variables
GridBagConstraints gbc = new GridBagConstraints();
public GblSO() {
// Set frame
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new GridBagLayout());
// Text areas
JTextArea left = new JTextArea("Left!");
JTextArea right = new JTextArea("Right!");
setConstraints(1, 1, GridBagConstraints.BOTH, null);
addToFrame(left, 0, 1, 1, 5, GridBagConstraints.CENTER);
addToFrame(right, 3, 1, 1, 5, GridBagConstraints.CENTER);
// Transfer buttons
JButton addBtn = new JButton(">");
JButton rmvBtn = new JButton("<");
setConstraints(0, 0, GridBagConstraints.NONE, new Insets(3, 5, 3, 5));
addToFrame(addBtn, 1, 1, 2, 1, GridBagConstraints.CENTER);
addToFrame(rmvBtn, 1, 3, 2, 1, GridBagConstraints.CENTER);
// OK/Cancel buttons
JButton okBtn = new JButton("OK");
JButton canBtn = new JButton("Cancel");
setConstraints(0, 0, GridBagConstraints.NONE, new Insets(15, 4, 15, 4));
addToFrame(okBtn, 0, 6, 2, 1, GridBagConstraints.EAST);
addToFrame(canBtn, 2, 6, 2, 1, GridBagConstraints.WEST);
// Show
pack();
setVisible(true);
}
private void setConstraints(double weightx, double weighty, int fill, Insets insets) {
gbc.weightx = weightx; // how much cell resizes
gbc.weighty = weighty; // "
gbc.fill = fill; // how component fills cell
gbc.insets = (insets == null ? new Insets(0, 0, 0, 0) : insets);
}
private void addToFrame(Component comp,
int gridx, int gridy, int gridwidth, int gridheight, int anchor) {
gbc.gridx = gridx;
gbc.gridy = gridy;
gbc.gridwidth = gridwidth;
gbc.gridheight = gridheight;
gbc.anchor = anchor;
add(comp, gbc);
}
public static void main(String[] args) {
new GblSO();
}
}
을 : 나는 각각 1 열 및 2의 JFrame
에 >
및 <
버튼을 추가하고, 여러 열, 열 1과 2에 걸쳐하지 않는 경우 동일한 너비를 갖도록 강제 설정되고 아래쪽 단추 세트가 이제 중앙에 배치됩니다.
코드 변경 :
addToFrame(addBtn, 1, 1, 1, 1, GridBagConstraints.CENTER);
addToFrame(rmvBtn, 2, 3, 1, 1, GridBagConstraints.CENTER);
결과 :!
두 JTextArea
는 :-(여전히 다른 폭을 가지고 있고, 분명히 >
및 <
정렬 될 수 없습니다
이 문제를 어떻게 해결하여 버튼이 가운데에 오도록 할 수 있습니까? JTextArea
은 같은 너비입니까? 도와 주셔서 감사합니다.
GridBagLayout
에 필요한 각각의 컬럼에 추가 구성 요소를 가지고 있지 않기 때문이다