我想使面板具有受约束的最大宽度,但当容器变短时会减小其宽度。GridBagLayout和最小宽度
我使用了GridBagLayout
,但当尺寸变得足够短时,它表现得很奇怪。
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
* @author Michael Nesterenko
*
*/
public class SSCE extends JFrame {
/**
*
*/
public SSCE() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GridBagLayout gbl = new GridBagLayout();
gbl.columnWidths = new int[] {200, 1};
gbl.columnWeights = new double[] {0, 1};
gbl.rowHeights = new int[] {10};
gbl.rowWeights = new double[] {0};
setLayout(gbl);
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.HORIZONTAL;
JPanel sizeRestrictedPanel = new JPanel();
sizeRestrictedPanel.setBackground(Color.BLUE);
sizeRestrictedPanel.setMinimumSize(new Dimension(50, 50));
sizeRestrictedPanel.setMaximumSize(new Dimension(300, 50));
sizeRestrictedPanel.setPreferredSize(new Dimension(300, 50));
add(sizeRestrictedPanel, gbc);
JPanel dummy = new JPanel();
dummy.setBackground(Color.RED);
add(dummy, gbc);
setPreferredSize(new Dimension(600, 200));
pack();
}
/**
* @param args
*/
public static void main(String[] args) {
new SSCE().setVisible(true);
}
}
当帧宽度变得足够短蓝色面板瞬间调整大小,但是我希望它平滑地调整窗口大小调整大小。
使用'setXxXSize()'方法也可能是罪魁祸首。如果你可以提供一个你想要得到的结果的小图像,这将有帮助:-) –
@nIcEcOw,当窗口足够大时,我希望蓝色面板有一些限制宽度,但是当窗口是做得更短(所以'蓝色'面板不再适合)'蓝色'面板的宽度等于窗口的宽度并且平滑地调整大小。目前它只是跳到一些较小的价值。 –
请看看这个[回复](http://stackoverflow.com/a/9645548/1057230),看看它是否与你的情况相似。为了确定大小,您可以考虑使用[ComponentListener](http://docs.oracle.com/javase/7/docs/api/java/awt/event/ComponentListener.html)并将其附加到您的'Blue JPanel' –