GridBagLayout에 대한 기본적인 내용이 누락 된 것 같습니다. 나는 라벨이 2 단위 폭이어야하고 텍스트 필드는 10 단위 넓이가되어야한다고 지정하려고합니다.GridBagLayout 구성 요소의 너비가 잘못 표시됩니다.
다음 코드는 내가하는 일을 모방합니다. 텍스트 필드와 라벨이 거의 동일한 양의 너비를 차지하는 것을 보여줍니다. 나는 무엇을 놓치고 잘못하고 있는가?
package numbers;
import javax.swing.*;
import java.awt.*;
public class FooBar extends JFrame {
public static void main(String[] args) {
new FooBar();
}
FooBar() {
super("Foobar");
setSize(600,100);
JPanel panel = new JPanel();
setLayout(new GridBagLayout());
JLabel nLabel = new JLabel("Foo");
JTextField nTextField = new JTextField("Bar");
GridBagConstraints c = new GridBagConstraints();
add(nLabel, cs(0, 0, 2, 1, c.CENTER, c.NONE));
add(nTextField, cs(2, 0, 10, 1, c.CENTER, c.HORIZONTAL));
add(panel);
setVisible(true);
}
private GridBagConstraints cs(int gridx, int gridy,
int gridwidth, int gridheight,
int anchor, int fill) {
GridBagConstraints c = new GridBagConstraints();
c.gridx = gridx;
c.gridy = gridy;
c.gridwidth = gridwidth;
c.gridheight = gridheight;
c.anchor = anchor;
c.fill = fill;
c.weightx = 1;
c.weighty = 1;
return c;
}
}
은 내가 nLabel의 gridwidth 2 것을 지정 거라고 생각했고, nTextField의 gridwidth은 10 것을 나는 열은 동일한 weightx에는이 같은 폭 약이 될 것이라고 생각합니다. 그런데 왜 구성 요소의 너비가 같습니까? 그리고 컬럼의 크기가 다른 이유는 무엇입니까?
업데이트 :
추가 weightx에는 = 2 weightx에는 = 10이 코드를 수정하는 것 같다 ...하지만 더 큰 맥락에서 작동하지 않습니다. 내가 사용하는 코드는 다음과 같이 보입니다 : 나는 weightx = gridwidth;
를 추가하여이 도우미 메서드 (CS)을 변경하여 해결 될 거라고 생각
add(intro1, cs(0, 0, 12, 1, c.WEST, c.NONE));
add(intro2, cs(0, 1, 12, 1, c.WEST, c.NONE));
add(nLabel, cs(0, 3, 2, 1, c.CENTER, c.NONE));
add(nTextField, cs(2, 3, 10, 1, c.CENTER, c.HORIZONTAL));
add(nthFoundLabel, cs(0, 4, 3, 1, c.CENTER, c.NONE));
add(nFoundText, cs(2, 4, 10, 1, c.CENTER, c.HORIZONTAL));
add(blankLine, cs(0, 5, 12, 1, c.CENTER, c.HORIZONTAL));
add(startButton, cs(0, 6, 6, 1, c.CENTER, c.NONE));
add(stopButton, cs(6, 6, 6, 1, c.CENTER, c.NONE));
add(blankLine, cs(0, 7, 12, 1, c.CENTER, c.BOTH));
add(progressLabel, cs(0, 8, 12, 1, c.CENTER, c.NONE));
add(lastFoundLabel, cs(0, 9, 3, 1, c.CENTER, c.NONE));
add(lastFoundText, cs(3, 9, 9, 1, c.CENTER, c.HORIZONTAL));
add(lastNText, cs(3, 10, 9, 1, c.CENTER, c.HORIZONTAL));
add(elapsedLabel, cs(0, 11, 3, 1, c.CENTER, c.HORIZONTAL));
add(remainingLabel, cs(0, 12, 3, 1, c.CENTER, c.HORIZONTAL));
add(progressBar, cs(0, 13, 12, 1, c.CENTER, c.HORIZONTAL));
을하지만 여전히 문제가 해결되지 않습니다. 지구상에서 무슨 일이 일어나고있는거야?
"2 단위"는 무엇을 의미합니까? 무슨 단위 요? – MadProgrammer
두 구성 요소의 비율은 2:10이어야합니다. –
0에서 1 사이의 값을 허용하면서 대신 'weightx'를 사용하십시오. – MadProgrammer