Java 创建处理所有类型的Swing组件的方法
为了在设置Swing组件(JPanel、JLabel等)的大小时节省一些时间,我尝试编写一个方法,在调用该方法时,将使用3个标准大小定义函数来设置该组件的大小 我希望能够做到这一点:Java 创建处理所有类型的Swing组件的方法,java,swing,jcomponent,Java,Swing,Jcomponent,为了在设置Swing组件(JPanel、JLabel等)的大小时节省一些时间,我尝试编写一个方法,在调用该方法时,将使用3个标准大小定义函数来设置该组件的大小 我希望能够做到这一点: import CustomComponents; ... JPanel xPanel = new JPanel(); CSize.setDefiniteSize(xPanel, 400, 300); ... 或(最好是) 这是我到目前为止的代码。问题是,我希望该方法对所有类型的Swing组件都有效,而且它似乎
import CustomComponents;
...
JPanel xPanel = new JPanel();
CSize.setDefiniteSize(xPanel, 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(即使它是一个子类?我仍然不知道它是如何工作的)您必须使用
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
,因为这个类定义了您想要使用的所有方法(,和)。尽管您试图做的事情,您可能认为是狡猾的,但您可能会发现,稍后会阻止尝试调整所有内容的大小
看到这条线了吗
相反,你应该利用LayoutManager。和.pack()
框架。Swing用于LayoutManager。您需要考虑到,您的程序在开发屏幕上可能看起来不错,但在其他屏幕上可能会有所不同。你还将发现,许多员工甚至不尊重你喜欢的尺码,所以你需要了解哪些人喜欢,哪些人不喜欢。这里有一个
使用布局管理器,您可以让布局为您完成所有大小调整。有些布局会拉伸组件,有些布局会将组件放在开放空间的中心。如果你使用它们,你的程序将会更加流畅
有关如何使用它们的更多详细信息,请参阅。能否发布准确的错误/异常?CustomComponents.CSize类中的方法setDefiniteSize无法应用于给定类型;必需:javax.swing.JComponent、init、init;找到:javax.swing.JFrame.int,int;原因:实际参数javax.swing.JFrame无法通过方法调用转换为javax.swing.JComponent。转换
JFrame
不是JComponent
@Scott:布局是正确的选择;不要这样做。谢谢你的解释!我没有跳出框框进行思考,所以我只想解释组件如何适合其层次结构。但这是值得一提的一点!
java.awt.Component
|--java.awt.Container
|--java.awt.Window
| |--java.awt.Frame
| |--javax.swing.JFrame
|--javax.swing.JComponent
|--javax.swing.JLabel