我正在尝试修改JToolBar的行为,以允许它停靠到多个JPanel。 作为本练习的一部分,我需要重写我尝试使用与原始定义非常相似的匿名类执行的方法getDockingConstraint
。
问题是原始实现引用this
几次,我认为这很好,但我一定错过了一些东西,因为 IDE 报告匿名类看不到this.dockingSensitivity
。
这里有一个简单的更改,还是我应该跳过这种方法,只创建一个完整的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;
}
}
});
}
dockingSensitivity
是类BasicToolBarUI
内部的私有字段。您将无法直接更改此设置。如果您仍然想编辑并面对潜在的后果,则可以使用 Java 反射库。