创建一个方法来处理所有类型的Swing组件

时间:2014-01-28 08:13:08

标签: java swing jcomponent

为了在设置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(即使它是一个子类?我仍然不喜欢)得到这是如何工作的)

2 个答案:

答案 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,因为此类定义了您要使用的所有方法(setMinimumSizesetMaximumSizesetPreferredSize)。