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