我有一個JFrame
,其根JPanel
實例化爲GridBagLayout
。在運行時,面板將使用基於某些說明的組件進行填充,並且寬度,高度和x,y座標將在說明中給出,以便與GridBagConstraints
中的gridwidth
,gridheight
,gridx
和gridy
字段一起使用。這些組件本身也可以是JPanel
和它們自己的子組件,並且GridBagConstraints
,GUI在樹中描述,所以Frame被遞歸地填充。gridbaglayout的組件可以在調整大小時填充父框架嗎?
我遇到的問題是,當框架被調整大小時,內部組件不會被拉伸以填充它們給定的寬度和高度。我已經給出了一個下面的佈局代碼的例子,裏面有截圖。
import javax.swing.*;
import javax.swing.border.TitledBorder;
import java.awt.*;
import java.util.*;
public class GridBagTest extends JPanel {
private final GridBagConstraints gbc = new GridBagConstraints();
public GridBagTest(){
setLayout(new GridBagLayout());
add(gbcComponent(0,0,1,2), gbc);
add(gbcComponent(1,0,2,1), gbc);
add(gbcComponent(1,1,1,1), gbc);
add(gbcComponent(2,1,1,1), gbc);
}
//Returns a JPanel with some component inside it, and sets the GBC fields
private JPanel gbcComponent(int x, int y, int w, int h){
gbc.gridx = x;
gbc.gridy = y;
gbc.gridwidth = w;
gbc.gridheight = h;
gbc.fill = GridBagConstraints.BOTH;
JPanel panel = new JPanel();
JTextField text = new JTextField("(" + w + ", " + h + ")");
panel.setBorder(new TitledBorder("(" + x + ", " + y + ")"));
panel.add(text);
return panel;
}
public static void main (String args[]){
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(new GridBagTest());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
我需要它因此在圖像2中,內JPanel
的控股組件被調整大小以填補GridBagLayout
它們各自的寬度和高度,理想的拉伸他們的組件。
看起來像這樣的作品!不能相信我從來沒有嘗試過。現在有沒有什麼方法可以讓只有一個組件的內部面板具有該組件的尺寸以填充它?即文本字段的寬度是否被拉伸? –
@ adnan_252:是的,但你需要給那些內部的JPanel佈局管理器,比如GridBagLayout或BorderLayout,或者......當前你的內部JPanel只使用默認的FlowLayout,而且這個佈局非常簡單不擴展組件。 –
再次感謝,這已經非常有用! –