[英]Java Swing: How do I define one minimal dimension (of the two) for components?
要成功定義最小大小,我必須執行以下操作:
// setting minimal width AND height
Dimension min = new Dimension(100, 100);
comp.setMinimumSize(min);
comp.setPreferredSize(min);
comp.setSize(min);
當我離開一行時,它不起作用,這很奇怪,但這不是重點。
我該怎么做,以限制只有兩個維度(寬度或高度) 之一 ,讓部件和/或布局管理器自動決定對未指定的尺寸?
當我對該維度使用非常小的值而我不想限制時,許多組件顯示錯誤(即太小)。
默認情況下(即,如果未在組件上調用setMinimumSize
), getMinimumSize
委托給組件的布局管理器,因此您可以嘗試重新定義getMinimumSize
方法,如下所示:
public Dimension getMinimumSize()
{
return new Dimension(minWidth, super.getMinimumSize().height);
}
如果這樣做,請記住不要在組件上調用setMinimumSize
。
我自己提出一個方法:
對於將一個軸(例如BoxLayout
)對齊的布局管理器,可以指定設置為Integer.MAX
“未定義維度”。 這很奇怪,但它確實有效。 似乎忽略了與對齊軸相對的軸(除非它太小,如問題中所述)。
private final static int UNSPECIFIED_DIMENSION = Integer.MAX_VALUE;
public static void setMinimalDimension(Component comp, int width, int height) {
Dimension dim = new Dimension(width, height);
comp.setMinimumSize(dim);
comp.setPreferredSize(dim);
comp.setSize(dim);
}
public static void setMinimalWidth(Component comp, int width) {
setMinimalDimension(comp, width, UNSPECIFIED_DIMENSION);
}
public static void setMinimalHeight(Component comp, int height) {
setMinimalDimension(comp, UNSPECIFIED_DIMENSION, height);
}
如上所述,使用軸對齊布局管理器。
是的,還有另一個關於Java Swing的謎團......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.