2016-03-19 27 views
0

JToolBarの動作を変更して複数のJPanelにドッキングさせようとしています。この練習の一環として、私は匿名クラスで元のメソッドと似た定義を使ってやっていたメソッドgetDockingConstraintをオーバーライドする必要があります。匿名Javaサブクラスから "this"にアクセスする

問題は、元の実装では何回かうまくいくと思っていましたが、this.dockingSensitivityは匿名クラスには表示されないことがIDEから報告されているため、何か不足しているはずです。

ここでは簡単な変更がありますか、この方法をスキップしてBasicToolBarUIの完全サブクラスを作成するだけですか?あるいは、JToolBarのドッキング機能を変更するより良い方法がありますか?

public MultiDockToolBar() { 
     setUI(new BasicToolBarUI(){ 
      @Override 
      private String getDockingConstraint(Component var1, Point var2) { 
       if(var2 == null) { 
        return this.constraintBeforeFloating; 
       } else { 
        if(var1.contains(var2)) { 
         // Breaks here when using this.: 
         this.dockingSensitivity = this.toolBar.getOrientation() == 0?this.toolBar.getSize().height:this.toolBar.getSize().width; 
         if(var2.y < this.dockingSensitivity && !this.isBlocked(var1, "North")) { 
          return "North"; 
         } 

         // Check East 
         // Check West 
         // Check South 

        } 

        return null; 
       } 
      } 
     }); 
    } 
+0

私はこの質問がリンクされた質問と重複しているとは思わない。同様に、内部クラスから外部クラスの "this"にアクセスしようとしています。私はスーパークラスのプライベートフィールドにアクセスするために "this"を使っていた別のクラスをサブクラス化しようとしています。私は、サブクラスを匿名の内部クラスとして定義することになりますが、内部クラスがプライベートフィールドを持つクラスを拡張していることが重要です。もちろん、ああ、 –

答えて

1

dockingSensitivityBasicToolBarUIクラス内部のプライベートフィールドです。これを直接変更することはできません。潜在的な結果を編集して直面したい場合は、Java Reflectionsライブラリを使用できます。

+0

。ありがとうございました。私は、JDKの実装から大部分を借りて、通常の名前付きサブクラスを作成するという道を行くかもしれないと思っています。 –

関連する問題