【发布时间】:2013-07-25 11:53:39
【问题描述】:
我想制作限制最大宽度的面板,但是当容器变短时会减小其宽度。
我使用了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,我希望
blue面板在框架窗口足够大时有一些限制宽度,但是当窗口变短时(所以blue面板不再适合)blue面板的宽度变得等于窗口的宽度并且平滑地调整大小。目前它只是跳到一些较小的值。 -
请查看answer,看看这是否也与您的情况相似。对于调整大小,您可以考虑使用 ComponentListener 并将其附加到您的
Blue JPanel
标签: java swing gridbaglayout