当前位置: 首页 > 面试题库 >

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

许庆
2023-03-14
问题内容

如果我想创建自己的自定义商品,JButton并且想设置首选尺寸,该如何做。我以为这可能很容易,但是当我达到它时,我便有了一个尺寸,可以将其发送到我喜欢的尺寸。

但是,然后如何为我的特定组件设置正确的 xywidthheight
JButtonsetPreferredSize从同一个方法中再次调用似乎很多余?

这是我对覆盖A感到奇怪的事情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文档:

如果preferredSize已设置为非null值,则将其返回。如果UI委托的getPreferredSize方法返回非null值,则返回该值;否则,返回null。否则请遵从组件的布局管理器。

使用设置首选大小时setPreferredSize,一切都很好。(我
建议仅创建组件的子类以调用set...构造函数中的某些方法,但我假设您将拥有一些其他方法来证明扩展该类是合理的)。

但是,在重写getPreferredSizeJComponent,应该尝试保留此方法的语义。这意味着您应该这样覆盖它

@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询问首选大小,但这在这里可能是不希望的)



 类似资料:
  • 问题内容: 我有一个并且设置,然后在“值”属性的“属性更改”中添加了一个事件侦听器。 首先,它在键入时不会调用事件侦听器方法。但是在“ focusLost”上,它将调用事件侦听器,此后 ,当再次获得焦点时,它将在键入时调用事件侦听器。 我希望事件监听器在任何时间发生任何更改之后都可以被调用(即使在第一时间)。 有什么问题?我该如何解决? 问题答案: 可能您必须在这里查看DocumentListen

  • 我在catalina.sh中设置CATALINA_OPTS,但奇怪的是,这个值似乎被忽略了。我在一台有768M内存的机器上。以下是复制的步骤 在启动Tomcat之前,我通过运行检查内存。我得到以下信息 我在catalina.sh的第一行设置了CATALINA_OPTS,如下所示: 这表明使用了512MB。我不确定我做错了什么。我还尝试设置JAVA_OPTS,但也不起作用。 我在Centos6上使用

  • 问题内容: 我需要一个带有附加的下拉样式菜单的JButton。因此,我采用了JPopupMenu并将其附加到JButton上,就像在下面的代码中看到的那样。它需要做的是: 单击时显示弹出窗口 如果第二次单击则将其隐藏 如果在弹出窗口中选择了一项,则将其隐藏 如果用户单击屏幕上的其他位置,则将其隐藏 这4种方法都可以使用,但是由于我使用的是boolean标志,如果用户单击其他位置或选择了一个项目,则

  • 我正在用pygame和数学模块用python编写一个游戏。我写了这些代码来进行碰撞检测(我制造了5个障碍物,我想让我的玩家与之碰撞),但问题是在玩游戏的过程中,有时有效,有时无效。 这些是我定义的碰撞函数 在while循环中 请告诉我哪里做错了。

  • 问题内容: 我在Ubuntu Hardy VPS上做了一份计划工作,只有一半可以工作,我不知道为什么。这项工作是一个Ruby脚本,它使用mysqldump备份Rails应用程序使用的MySQL数据库,然后将其压缩并使用SFTP上传到远程服务器。 gzip文件已成功创建并复制,但始终为零字节。但是,如果我直接从命令行运行cron命令,它将运行完美。 这是cron工作: 这是datadump.rb:

  • 问题内容: 我是eclipse的新手,我在eclipse中的计时器无法正常工作,这是我的java。计时器中的代码: 基本上一切都按我的意愿运行,但是,我发现如果在计数时单击触发按钮,它将触发另一个计数而不会停止先前的计数。这非常令人尴尬,如果按钮再次触发,我的朋友建议我执行“切换”操作,并且我正在考虑向同一按钮添加其他操作,以停止重新启动计数。哪一个更可取? 问题答案: 计时器运行时禁用触发按钮。