首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIDefaults.getUI()失败:将JFrame加载到另一个项目时出错

UIDefaults.getUI()失败:将JFrame加载到另一个项目时出错
EN

Stack Overflow用户
提问于 2012-07-16 15:42:50
回答 2查看 3.3K关注 0票数 0

我找到了这个项目,它在独立运行时工作得很好。但是,当我试图将它添加到另一个项目中的JPanel (已经在完全相同的项目中这样做了,但使用了自己的JFrame并且工作得很好)时,会出现这样的错误:

代码语言:javascript
复制
 UIDefaults.getUI() failed: no ComponentUI class for: doubleslider.MThumbSlider[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=0,maximumSize=,minimumSize=,preferredSize=,isInverted=false,majorTickSpacing=0,minorTickSpacing=0,orientation=HORIZONTAL,paintLabels=false,paintTicks=false,paintTrack=true,snapToTicks=false,snapToValue=true]
    java.lang.Error
        at javax.swing.UIDefaults.getUIError(UIDefaults.java:729)
        at javax.swing.MultiUIDefaults.getUIError(MultiUIDefaults.java:130)
        at javax.swing.UIDefaults.getUI(UIDefaults.java:759)
        at javax.swing.UIManager.getUI(UIManager.java:1002)
        at javax.swing.JSlider.updateUI(JSlider.java:323)
        at doubleslider.MThumbSlider.updateUI(MThumbSlider.java:44)
        at javax.swing.JSlider.<init>(JSlider.java:275)
        at javax.swing.JSlider.<init>(JSlider.java:182)
        at doubleslider.MThumbSlider.<init>(MThumbSlider.java:24)
        at doubleslider.DoubleSlider.<init>(DoubleSlider.java:29)
        at com.einge.scadaremotecontrol.Ventana.<init>(Ventana.java:227)
        at com.einge.scadaremotecontrol.ScadaRemoteControl.<init>(ScadaRemoteControl.java:92)
        at com.einge.scadaremotecontrol.ScadaRemoteControl.main(ScadaRemoteControl.java:197)
    UIDefaults.getUI() failed: no ComponentUI class for: doubleslider.MThumbSlider[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=0,maximumSize=,minimumSize=,preferredSize=,isInverted=false,majorTickSpacing=0,minorTickSpacing=0,orientation=HORIZONTAL,paintLabels=false,paintTicks=false,paintTrack=true,snapToTicks=false,snapToValue=true]
    java.lang.Error
        at javax.swing.UIDefaults.getUIError(UIDefaults.java:729)
        at javax.swing.MultiUIDefaults.getUIError(MultiUIDefaults.java:130)
        at javax.swing.UIDefaults.getUI(UIDefaults.java:759)
        at javax.swing.UIManager.getUI(UIManager.java:1002)
        at javax.swing.JSlider.updateUI(JSlider.java:323)
        at doubleslider.MThumbSlider.updateUI(MThumbSlider.java:44)
        at doubleslider.MThumbSlider.<init>(MThumbSlider.java:26)
        at doubleslider.DoubleSlider.<init>(DoubleSlider.java:29)
        at com.einge.scadaremotecontrol.Ventana.<init>(Ventana.java:227)
        at com.einge.scadaremotecontrol.ScadaRemoteControl.<init>(ScadaRemoteControl.java:92)
        at com.einge.scadaremotecontrol.ScadaRemoteControl.main(ScadaRemoteControl.java:197)

我的第一个猜测是,MultiTumbSlider类试图设置与我的JFrame不同的外观和感觉。有什么解决办法吗?我想不出这点,我真的需要两个滑块才能有一个时间范围

任何帮助都会得到认可!

EN

回答 2

Stack Overflow用户

发布于 2012-07-17 17:13:38

我不承认在这个非常古老的示例中使用的加载方法;它似乎是基于当前的外观和感觉。您可以尝试显式地设置javax.swing.plaf.metal.MetalLookAndFeel。展望未来,看看Kirill的http://today.java.net/pub/a/today/2007/02/22/how-to-write-custom-swing-component.html,看看关于代表管道现代化的指导。

票数 3
EN

Stack Overflow用户

发布于 2016-09-12 17:38:19

在"Java Swing,第2版“一书中,由Marc et著。al.,在“创建您自己的组件”一节(第28章:Hood下的Swing ),我们在main()方法中有代码行:

代码语言:javascript
复制
UIManager.put(JogShuttleUI.UI_CLASS_ID, "BasicJogShuttleUI");

这将通过UIDefaults通知UIManeger自定义组件的基本UI委托的类名。但是,请注意,您必须提供完全限定的类名,因为它将由类加载机制定位。

例如,当我使用

代码语言:javascript
复制
UIManager.put(DiagramUI.UI_CLASS_ID, "BasicDiagramUI");

你的问题也报告了同样的错误。但是,当我把它改成

代码语言:javascript
复制
UIManager.put(DiagramUI.UI_CLASS_ID, BasicDiagramUI.class.getName());

一切都很顺利。很好的编码!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11507739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档