Java에서 Swing 구성 요소를 사용하여 간단한 GUI를 만들려고합니다. 그러나 일부 구성 요소는 다른 구성 요소의 크기로 인해 중앙에서 벗어납니다. GridBagConstraints.CENTER를 사용하여 이러한 구성 요소를 중앙에 배치했지만 내부에 포함 된 Grid 셀에 대해서만 중심에 배치하는 것으로 보입니다.Java에서 GridBagLayout을 사용할 때 스윙 구성 요소가 중심에서 벗어나지 않게하기
내가 가진 특정 문제는 아래에 그려져 있습니다. "File Name :"옆에 JTextField가 있어야 특정 길이가됩니다. 그러나 이것을 일정 길이로 만들면 다른 행의 다른 구성 요소가 중심에서 벗어나게됩니다. 모든 구성 요소를 가운데 맞춤으로 유지하는 유일한 방법은 두 JTextField가 동일한 길이가되도록하는 것입니다.
저는 Swing과 Java GUI에 일반적으로 익숙하지 않으므로 몇 가지 기본 개념이 빠져 있을지 모르지만 아직 내 검색에서이 특정 질문에 대한 답변을 찾지 못했습니다. gbc.fill
가 None
경우
Image Showing the Components becoming Off-Centered when the JTextField length changes
>
//Initialize global Swing objects
JFrame frame = new JFrame("Game Server V2.0 build 019827427");
JPanel panel = new JPanel();
JButton runButton = new JButton("Start Server");
JButton stopButton = new JButton("Stop Server");
JButton sendButton = new JButton("Send File");
JTextField portField = new JTextField("999", 5);
JTextField fileField = new JTextField("fileToSend.txt", 14);
JLabel portLabel = new JLabel("Port: ");
JLabel fileLabel = new JLabel("File Name: ");
JLabel statusLabel = new JLabel("Status: Disconnected");
public void run(){
//Set layout and constraints
panel.setLayout(new GridBagLayout());
GridBagConstraints gc = new GridBagConstraints();
//Add Swing components to panel using GridBagLayout with the GridBagConstraints we've specified
gc.weightx = 0.5;
gc.weighty = 0.5;
gc.gridx = 0;
gc.gridy = 0;
gc.gridwidth = 1;
gc.anchor = GridBagConstraints.LINE_END;
panel.add(portLabel, gc);
gc.gridx = 1;
gc.gridy = 0;
gc.gridwidth = 1;
gc.anchor = GridBagConstraints.LINE_START;
panel.add(portField, gc);
gc.gridx = 0;
gc.gridy = 1;
gc.gridwidth = 1;
gc.anchor = GridBagConstraints.LINE_END;
panel.add(fileLabel, gc);
gc.gridx = 1;
gc.gridy = 1;
gc.gridwidth = 1;
gc.anchor = GridBagConstraints.LINE_START;
panel.add(fileField, gc);
gc.gridx = 0;
gc.gridy = 2;
gc.gridwidth = 2;
gc.anchor = GridBagConstraints.CENTER;
panel.add(sendButton, gc);
gc.gridx = 0;
gc.gridy = 3;
gc.gridwidth = 1;
panel.add(runButton, gc);
gc.gridx = 1;
gc.gridy = 3;
gc.gridwidth = 1;
panel.add(stopButton, gc);
gc.gridx = 0;
gc.gridy = 4;
gc.gridwidth = 2;
panel.add(statusLabel, gc);
frame.add(panel);
frame.setSize(480, 280);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
GridBagContraints.CENTER는 셀의 구성 요소 중심을 (수직 및 수평으로) 가운데 맞추기 위해 설계되었습니다. –
frame.setSize를'frame.pack()'으로 대체해야합니다. GridBagLayout에 컴포넌트 레이아웃을위한 충분한 공간이 없습니다. – VGR
'하지만 그 안에 포함 된 그리드 셀에 대해서만 중심을 유지하는 것 같습니다. - 올바른, 구성 요소는 셀 내에 배치됩니다. 나는 당신에게 "중심"이 무엇을 의미하는지 모르겠습니다. 구성 요소를 표시하는 방법을 보여주는 ascii 다이어그램을 그립니다. 셀의 왼쪽 가장자리에 "시작"단추가 표시되고 오른쪽 가장자리에 "중지"단추가 표시되기를 원할 수도 있습니다. – camickr