gpt4 book ai didi

java - 覆盖 JComponent.getBaselineResizeBehavior() 但保持 Java5 兼容性

转载 作者:搜寻专家 更新时间:2023-11-01 02:56:27 25 4
gpt4 key购买 nike

对于我的 Swing 项目,我需要同时支持 Java 5Java 6。我已经定义了一个自定义的 JComponent(称之为 Picture),在将它嵌入到 JScrollPane 中之后,我把它放在了一个 JPanel 中 使用 DesignGridLayout 管理器。

得益于 swing-layout 开源库,DesignGridLayout 支持基线对齐(实现对 Java 5 的基线支持并提供与新的 Java 6 基线支持的兼容性)。

我的 Pictureoverrides public int getBaseline(int width, int height) 以便我可以为其定义正确的基线。请注意,“override”并不完全正确:它覆盖了 Java6 上的方法,但在 Java5 中定义了它。

当我在 Java5 上运行我的示例应用程序时,一切正常:正确使用了我定义的 Picture 基线。

但是,当我使用 Java6 时,我的 Picture#getBaseline() 方法没有被调用!当然,我的图片的基线对齐很糟糕(居中)。

检查 Java6 源代码后,我看到,在 BasicScrollPaneUI 中,getBaseline() 首先调用视口(viewport)组件上的 getBaselineResizeBehavior() (我的 Picture 实例)。只有当 getBaselineResizeBehavior() 返回 Component.BaselineResizeBehavior.CONSTANT_ASCENT 时,它才会调用 getBaseline()

现在我的问题是 getBaselineResizeBehavior()JComponent 的 Java6 方法,我无法在 Java5 中实现它,因为它返回一个枚举 Component.BaselineResizeBehavior 在 Java5 中不存在。

所以我的问题(最后)是:如何实现(或模拟?)getBaselineResizeBehavior() 以便我的类仍然可以在 Java5 环境中编译和运行?

最佳答案

我会创建一个 Picture 的子类,可能称为 PictureJava6,它实现了 getBaselineResizeBehaviour(),并且在创建 Picture 的实例时,执行:

public Component pictureFactory() {
if(javaVersion > "1.6") {
return new PictureJava6();
} else {
return new Picture();
}
}

关于java - 覆盖 JComponent.getBaselineResizeBehavior() 但保持 Java5 兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/411982/

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