JavaでSwingコンポーネントを使用して簡単なGUIを作成しようとしています。しかし、一部のコンポーネントは他のコンポーネントのサイズのために中心から外れています。私はGridBagConstraints.CENTERを使用してこれらのコンポーネントを中心に置いていますが、それらは内部に含まれるGridセルに対してのみ中央に置かれているようです。JavaでGridBagLayoutを使用しているときにSwingコンポーネントが中心にならないようにする
私が持っている特定の問題は以下の通りです。私はJTextFieldを "File Name:"の横にある長さにする必要があります。しかし、これを一定の長さにすると、他の行の他のコンポーネントがオフセンタリングされます。すべてのコンポーネントを中央に維持する唯一の方法は、両方のJTextFieldを同じ長さにすることです。
私はSwingとJava GUIの一般的な新機能ですので、いくつかの基本的な概念が不足している可能性がありますが、この特定の質問に対する回答はまだありません。
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