我想创建一个具有自定义外观的自定义JComponent(特别是自定义JToggleButton)。我想要做的只是覆盖组件的默认绘制并绘制我自己的东西(例如图像)
这是 NOT 关于如何做到这一点的问题(我对Java2D非常熟练)。我想问的是我必须采取哪些步骤来确保我的组件具有我希望它具有的尺寸?
到目前为止,我所做的测试一直存在问题。我画了200 * 100像素的图像,布局管理器只显示我组件的一部分。我尝试了setSize,setPrefferedSize,setMinimumSize,但没有一个工作。
答案 0 :(得分:4)
Swing模型中没有办法可以直接保证给你一定数量的空间 - 布局管理员可以并且确实忽略了最小和最大尺寸,但通常它们只会忽略其中一种。
如果您有固定尺寸的组件,则应覆盖getMinimumSize
,getPreferredSize
和getMaximumSize
,以便返回您需要的固定尺寸的尺寸。如果您可以在某种程度上缩放,则根据需要调整最小值和最大值。覆盖这些方法可以避免某些第三方代码调用set*Size
方法并覆盖您的选择(布局管理器仍会调用setSize
来告诉组件实际分配的大小是正常的)。它还确保在布局管理器开始布置组件之前设置大小。
如果在布局发生后组件的大小可能会发生变化,则需要确保正确使组件布局无效,但如果可以的话,请避免这样做。
答案 1 :(得分:2)
大小由LayoutManager决定。如果您将使用null LayoutManager,您将能够强制使用特定大小(和位置)。否则你可以覆盖一些布局管理器会尊重的getPreferedSize()。