2016-03-19 14 views
0

Ich versuche, das Verhalten von JToolBar zu ändern, damit es an mehr als ein JPanel andocken kann. Als Teil dieser Übung muss ich die Methode getDockingConstraint überschreiben, die ich mit einer anonymen Klasse unter Verwendung einer dem Original sehr ähnlichen Definition versucht habe.Zugriff auf "diese" von einer anonymen Java-Unterklasse

Das Problem ist, dass die ursprüngliche Implementierung mehrmals referenziert this, die ich dachte, wäre in Ordnung, aber ich muss etwas fehlen, weil die IDE meldet, dass this.dockingSensitivity für die anonyme Klasse nicht sichtbar ist.

Gibt es hier eine einfache Änderung, oder sollte ich diesen Ansatz überspringen und nur eine vollständige Unterklasse von BasicToolBarUI erstellen? Oder gibt es vielleicht einen besseren Ansatz, um die Docking-Funktion von JToolBar zu modifizieren?

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

Ich glaube nicht, dass diese Frage ein Duplikat der verknüpften Frage ist. Während sie ähnlich sind, versuchen sie auf "dieses" für eine äußere Klasse von einer inneren Klasse zuzugreifen. Ich versuche, eine andere Klasse zu unterklassifizieren, die "this" verwendet, um auf ein privates Feld in der Superklasse zuzugreifen. Ich definiere die Unterklasse zufällig als eine anonyme innere Klasse, aber der Schlüssel ist, dass die innere Klasse die Klasse erweitert, die das private Feld hatte. –

Antwort

1

dockingSensitivity ist ein privates Feld innerhalb BasicToolBarUI Klasse. Sie können das nicht direkt ändern. Wenn Sie dennoch die möglichen Konsequenzen bearbeiten und bearbeiten möchten, können Sie die Java Reflections-Bibliothek verwenden.

+0

Oh natürlich. Dank dafür. Ich denke, ich könnte den Weg des Erstellens einer regulären benannten Unterklasse gehen, die sich größtenteils aus der JDK-Implementierung entlehnt. –