0

このプロジェクトは、スタンドアロンの実行で問題なく機能することがわかりました。ただし、別のプロジェクトで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とは異なるLook&Feelを設定しようとしていることです。解決策はありますか?私はこれを理解することができませんでした、そして私は本当に2つのスライダーが必要なので時間範囲を持っています

どんな助けでも感謝されます!

4

2 に答える 2

3

この非常に古い例で使用されている読み込み方法がわかりません。現在のルック アンド フィールに基づいているようです。javax.swing.plaf.metal.MetalLookAndFeel明示的に設定してみてください。今後は、Kirill Grouchnikov のHow to Write a Custom Swing Componentを参照して、デリゲート プラミングの最新化に関するガイダンスを確認してください。

于 2012-07-17T17:13:38.230 に答える
1

Marc Loy らの著書「Java Swing, 2nd Edition」。al.、「独自のコンポーネントの作成」(第 28 章: Swing Under the Hood) のセクションでは、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());

物事はかなりうまく機能します。素敵なコーディング!

于 2016-09-12T17:38:19.793 に答える