gpt4 book ai didi

java - 我自己的 JButton 首选大小无法正常工作?

转载 作者:行者123 更新时间:2023-11-29 10:13:56 25 4
gpt4 key购买 nike

如果我想创建自己的自定义 JButton 并且我想设置首选大小,我该怎么做。我认为这可能很容易,但是当我开始做时,我有一个尺寸可以发送到我喜欢的尺寸。

但是我该如何为我的设置正确的 xywidthheight 值特定的 JButton 组件。从同一方法的内部再次调用 setPreferredSize 似乎是多余的?

这是我对覆盖 JComponent 感到奇怪的地方。我看到了它们应该如何与 paintComponent(...) 一起工作。

我希望我的新按钮有一个首选大小(这是默认大小),即 20 x 20

如果构造函数未设置大小,我想在任何按钮上设置它。

还有在创建自定义按钮时应该覆盖哪些方法?

class myButton extends JButton {
public myButton(String s) {
super(s);
}
public void setPrefferedSize(Dimension d) {
this.setBounds(x, y, width, height)
setPreferredSize(d);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
setBackground(Color.RED);
}
}

最佳答案

首先:将 @Override 注释添加到您的 setPrefferedSize 方法会明确表明它应该被称为 setPreferredSize

除此之外,getPreferredSizesetPreferredSize 方法在 JComponent 中具有一些特殊语义。引用自 JComponent#getPreferredSize文档:

If the preferredSize has been set to a non-null value just returns it. If the UI delegate's getPreferredSize method returns a non null value then return that; otherwise defer to the component's layout manager.

当使用 setPreferredSize 设置首选尺寸时,一切正常。 (我建议创建组件的子类只是为了在构造函数中调用一些set...方法,但我假设你会有一些额外的证明扩展类的方法)。

但是,当重写 JComponentgetPreferredSize 时,应该尽量保留此方法的语义。这意味着你应该像那样覆盖它

@Override
public Dimension getPreferredSize()
{
// If the preferred size was set manually, return this
// size in order to be in line with the specification
// that is described in the JavaDoc
if (super.isPreferredSizeSet())
{
return super.getPreferredSize();
}

// Otherwise, return "your" preferred size. The
// DEFAULT_WIDTH and DEFAULT_HEIGHT would be 20,20
// in your case
return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT);
}

(实际上,必须先向 UI 询问首选尺寸,但此处可能不需要)

关于java - 我自己的 JButton 首选大小无法正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23501706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com