为了在设置Swing Components(JPanel,JLabel等)的大小时节省一些时间,我试图编写一个方法,在调用时,将使用3个标准大小定义函数设置该组件的大小
我希望能够做到这一点:
import CustomComponents;
...
JPanel xPanel = new JPanel();
CSize.setDefiniteSize(xPanel, 400, 300);
...
或(最好)
...
JPanel xPanel = new JPanel();
xPanel.CSize.setDefiniteSize(400, 300);
...
这是我到目前为止的代码。问题是,我希望该方法适用于所有类型的Swing组件,它似乎只适用于我在标题中指定的方法。
package CustomComponents;
import javax.swing.JComponent;
import java.awt.Dimension;
public class CSize
{
public static void setDefiniteSize(JComponent c, int h, int w)
{
Dimension k = new Dimension (h, w);
c.setMaximumSize(k);
c.setMinimumSize(k);
c.setPreferredSize(k);
}
}
正如你所看到的,这里我尝试使用JComponent,但是它不起作用,因为无论我使用它 - 比如一个JPanel--是一个JPanel,而不是一个JComponent(即使它是一个子类?我仍然不喜欢)得到这是如何工作的)
答案 0 :(得分:2)
虽然你正在尝试做什么,但你可能认为是狡猾的,但你可能会发现它后来试图调整一切的气氛
请参阅此帖子Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?
相反,您应该使用LayoutManagers。和.pack()
框架。使Swing与LayoutManager一起使用。您需要考虑到您的程序在开发屏幕上看起来不错,但在其他程序上可能看起来不同。您还会发现许多LayoutManegers甚至不会尊重您的首选大小,因此您需要了解哪些做了哪些,哪些不做。这是一个simple example
使用布局管理器,您可以让布局为您完成所有大小调整。一些布局会拉伸您的组件,一些布局将它们放在开放空间中。如果你使用它们,你的程序会更加流畅。
有关如何使用它们的详细信息,请参阅Laying out Components Within a Container。
答案 1 :(得分:0)
您必须使用java.awt.Container
,因为JFrame不是JComponent
的直接子类!
所以它应该使用以下代码:
package CustomComponents;
import java.awt.Container;
import java.awt.Dimension;
public class CSize {
public static void setDefiniteSize(Container c, int h, int w) {
Dimension k = new Dimension (h, w);
c.setMaximumSize(k);
c.setMinimumSize(k);
c.setPreferredSize(k);
}
}
查看组件的层次结构:
java.awt.Component
|--java.awt.Container
|--java.awt.Window
| |--java.awt.Frame
| |--javax.swing.JFrame
|--javax.swing.JComponent
|--javax.swing.JLabel
更好的是使用java.awt.Component
,因为此类定义了您要使用的所有方法(setMinimumSize,setMaximumSize和setPreferredSize)。