2012-07-16 57 views
0

我發現this project在獨立運行中工作得很好。然而,當我嘗試將其添加到JPanel在另一個項目(已經在完全相同的項目,但我自己的一個JFrame這樣做和工作得很好)這個錯誤出現了:UIDefaults.getUI()失敗:將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類試圖設置一個不同的Look &感覺比我的JFrame。任何解決方案我無法弄清楚這一點,我真的需要兩個滑塊所以有一個時間範圍

任何幫助將是appartiated!

+0

你使用什麼外觀和感覺? – MadProgrammer 2012-07-16 18:19:32

+0

@trashgod,我將工作項目導入爲jar文件,因此不會出現任何包裝問題。 – rMaero 2012-07-17 11:13:54

+0

@MadProgrammer我正在使用Windows L&F,我懷疑MThumbSlider項目正在使用一些「Metal」L&F – rMaero 2012-07-17 11:16:49

回答

3

我不承認在這個很舊的example中使用的加載方法;它似乎是基於目前的Look &的感覺。您可以嘗試明確設置javax.swing.plaf.metal.MetalLookAndFeel。展望未來,請看Kirill Grouchnikov的How to Write a Custom Swing Component,以獲得有關使代表管道現代化的指導。

+0

我使用MThumbSlider類中的updateUI()方法來加載L&F。與此同時,我設法擺脫了錯誤,但仍然在我的程序中缺少滑塊。我發現使這個滑塊出現的唯一方法是使用一個按鈕來顯示帶有滑塊的另一個JFrame,並將我的程序的L&F更改爲金屬工作。但我想在我的主窗口中顯示JPanel內的滑塊。我放棄了這個例子,因爲它花了幾個小時,沒有具體的東西來。你有沒有其他方法可以製作雙滑塊(或「範圍」滑塊)? – rMaero 2012-07-18 11:57:57

+0

我成功地跟隨了Kirill的指南。對不起,我沒有更好的了。 – trashgod 2012-07-18 19:19:46

+0

該檔案的相關示例在此處進行了檢查(http://stackoverflow.com/a/18242040/230513)。 – trashgod 2013-08-18 22:12:19

1

在Marc Loy等人着的書「Java Swing,2nd Edition」人,在節「創建您自己的組件」(第28章:搖擺的發動機罩下),我們在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()); 

事情工作得很好。好的編碼!

+1

謝謝你的回答。幫了很多 – Dan 2017-01-27 15:22:13

相關問題