2016-03-19 3 views
0

J'essaie de modifier le comportement de JToolBar pour lui permettre de se connecter à plus d'un JPanel. Dans le cadre de cet exercice, j'ai besoin de remplacer la méthode getDockingConstraint que j'ai essayé de faire avec une classe anonyme en utilisant une définition très similaire à l'original. Le problème est que l'implémentation d'origine référence this plusieurs fois que je pensais que cela irait bien, mais il me manque quelque chose car l'EDI signale que this.dockingSensitivity n'est pas visible par la classe anonyme.Accéder à "this" à partir d'une sous-classe Java anonyme

Y at-il un changement simple ici, ou devrais-je sauter cette approche et juste créer une sous-classe complète de BasicToolBarUI? Ou peut-être qu'il y a une meilleure approche entièrement à la modification de la capacité d'accueil de 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

Je ne pense pas que cette question soit un doublon de la question liée. Bien que similaires, ils essaient d'accéder à «ceci» pour une classe externe à partir d'une classe interne. J'essaie de sous-classer une autre classe qui utilisait "this" pour accéder à un champ privé sur la super classe. Il se trouve que je définis la sous-classe comme une classe interne anonyme, mais la clé est que la classe interne étend la classe qui a le champ privé. –

Répondre

1

dockingSensitivity est un champ privé à l'intérieur BasicToolBarUI classe. Vous ne serez pas en mesure de modifier directement cela. Si vous souhaitez toujours modifier et faire face aux conséquences potentielles, vous pouvez utiliser la bibliothèque Java Reflections.

+0

Oh, bien sûr. Merci pour ça. Je pense que je pourrais suivre la voie de la création d'une sous-classe nommée régulière, empruntant largement à l'implémentation du JDK. –