![](/img/trans.png)
[英]How make all components appear in center of the JPanel using GridBagLayout?
[英]How to align components center in the JPanel using GridBagLayout?
當我嘗試對齊我的組件時,它會在左側或右側。
所以我只想要解決這個問題的解決方案,並告訴我如何將面板的大小設置為 400 x 350 像素。
這是我的代碼.... titleLabel
和ResultLabel
應該居中對齊
public TimeGui() {
layout = new GridBagLayout();
setSize(400, 350); //**Its not working**
setBackground(Color.LIGHT_GRAY);
setBorder(BorderFactory.createLineBorder(Color.BLACK));
setBorder(new TitledBorder(new EtchedBorder(), "Time Conversion") );
setLayout(layout);
layoutConstraints = new GridBagConstraints();
textField1 = new JTextField(10);
textField2 = new JTextField(10);
String[] names1 = {"Seconds", "Minutes", "Hours", "Days", "Weeks"};
comboBox1 = new JComboBox<>(names1);
comboBox2 = new JComboBox<>(names1);
titleLabel = new JLabel("Time Conversion Unit", JLabel.CENTER);
resultLabel = new JLabel("Result Label");
equalLabel = new JLabel("=");
convertButton = new JButton("Convert");
layoutConstraints.fill = GridBagConstraints.HORIZONTAL;
Insets inset = new Insets(10, 10, 10, 10);
layoutConstraints.anchor = GridBagConstraints.CENTER;
addComponent(titleLabel, 0, 0, 2, 2, inset ); // I tried (0,1,2,2)
addComponent(comboBox1, 3, 0, 2, 3, inset);
addComponent(comboBox2, 3, 2, 2, 3, inset);
addComponent(textField1, 6, 0, 1, 2, inset);
addComponent(equalLabel, 6, 1, 1, 2, inset);
addComponent(textField2, 6, 2, 1, 2, inset);
addComponent(resultLabel, 8, 1, 2, 1, inset);
addComponent(convertButton, 10, 0, 2, 2, inset);
}
private void addComponent(Component component, int row,
int column, int width, int height, Insets inset1) {
layoutConstraints.gridx = column;
layoutConstraints.gridy = row;
layoutConstraints.gridwidth = width;
layoutConstraints.gridheight = height;
layoutConstraints.insets = inset1;
layout.setConstraints(component, layoutConstraints);
add(component);
}
}
問題在於您的gridwidth
和fill
屬性...
基本上我改變的只是......
addComponent(titleLabel, 0, 0, GridBagConstraints.REMAINDER, 2, inset); // I tried (0,1,2,2)
addComponent(comboBox1, 3, 0, 1, 3, inset);
addComponent(comboBox2, 3, 2, 1, 3, inset);
addComponent(textField1, 6, 0, 1, 2, inset);
addComponent(equalLabel, 6, 1, 1, 2, inset);
addComponent(textField2, 6, 2, 1, 2, inset);
layoutConstraints.fill = GridBagConstraints.NONE;
addComponent(resultLabel, 8, 0, GridBagConstraints.REMAINDER, 1, inset);
addComponent(convertButton, 10, 0, GridBagConstraints.REMAINDER, 2, inset);
你可以和其他幾個人一起玩。
至於定義面板的實際大小,你能做的最好的事情就是覆蓋TimeGui
的getPreferredSize
方法......
@Override
public Dimension getPreferredSize() {
return new Dimension(400, 350);
}
這將向父容器“建議”您想要布置的大小。 請記住,這是一個可選值,布局管理器完全有權忽略它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.