我发现this project在独立运行中运行良好。但是,当我尝试将它添加到另一个项目中的JPanel时(已在完全相同的项目中执行此操作但使用我自己的JFrame并且工作正常)会出现此错误:
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不同的外观和感觉。有解决方案吗我无法弄清楚这一点,我真的需要两个滑块才能有时间范围
任何帮助都会受到欢迎!
答案 0 :(得分:3)
我不认识这个很老的example中使用的加载方法;它似乎是基于目前的Look&amp;感觉。您可以尝试明确设置javax.swing.plaf.metal.MetalLookAndFeel
。展望未来,请查看Kirill Grouchnikov的How to Write a Custom Swing Component,获取有关代表管道现代化的指导。
答案 1 :(得分:1)
在Marc Loy等人的书“Java Swing,2nd Edition”中。例如,在“创建你自己的组件”一节(第28章:引擎盖下的Swing)中,我们有main()
方法的代码行:
UIManager.put(JogShuttleUI.UI_CLASS_ID, "BasicJogShuttleUI");
这将通过UIDefaults
通知UIManeger
自定义组件的基本UI委托的类名。但请注意,您必须提供完全限定的类名,因为它将由类加载机制定位。
例如,当我使用
时UIManager.put(DiagramUI.UI_CLASS_ID, "BasicDiagramUI");
我的问题报告的错误相同。但是,当我把它改为
时UIManager.put(DiagramUI.UI_CLASS_ID, BasicDiagramUI.class.getName());
事情很顺利。不错的编码!