因此,当我创建一个ControlsFX标题边框时,无论我得到什么奇怪的故障:
看到'hi'周围的白色区域?那并不是假设存在。奇怪的是,如果我将相同的边框(新实例)添加到另一个Tab
,那么它就变得正常了:
以下是生成边框的代码:
Node calculateBorderd2 = Borders.wrap(new TextField()).etchedBorder().title("hi").buildAll();
bottomBorderPane.setRight(calculateBordered2);
这只能在我的程序中重现。我试图创建mcve,但正如所说,我无法重现它。添加第二个边框100%修复了问题(不是有时候的事情)。
我很确定这是JavaFX或ControlsFX中的错误。我仔细查看了所有代码,找不到任何与此有关的东西(但显然有)。我正在使用一半和一半FXML。
我查看了反编译的Borders
类,发现背景生成为透明,如果场景不等于null,则生成其他内容:
private void updateTitleLabelFill() {
Scene s = n.getScene();
if(s == null) {
BackgroundFill fill = new BackgroundFill(Color.TRANSPARENT, (CornerRadii)null, (Insets)null);
this.titleLabel.setBackground(new Background(new BackgroundFill[]{fill}));
} else {
this.updateTitleLabelFillFromScene(s);
s.fillProperty().addListener(new WeakInvalidalionListener(this.updateTitleListener));
}
}
private void updateTitleLabelFillFromScene(Scene s) {
s.snapshot(new Callback() {
public Void call(SnapshotResult result) {
WritableImage image = result.getImage();
PixelReader reader = image.getPixelReader();
int start = (int)titleLabel.getLocalToSceneTransform().getTx();
int finish = (int)((double)start + titleLabel.getWidth());
int startY = (int)titleLabel.getLocalToSceneTransform().getTy();
int finishY = (int)((double)startY + titleLabel.getHeight());
HashMap map = new HashMap();
Color color;
for(int max = startY; max < finishY; ++max) {
for(int column = start; column < finish; ++column) {
try {
color = reader.getColor(column, max);
if(map.containsKey(color)) {
map.put(color, Integer.valueOf(((Integer)map.get(color)).intValue() + 1));
} else {
map.put(color, Integer.valueOf(1));
}
} catch (Exception var14) {
;
}
}
}
double var15 = 0.0D;
color = null;
Iterator fill = map.keySet().iterator();
while(fill.hasNext()) {
Color colorTemp = (Color)fill.next();
if((double)((Integer)map.get(colorTemp)).intValue() > var15) {
color = colorTemp;
var15 = (double)((Integer)map.get(colorTemp)).intValue();
}
}
BackgroundFill var16 = new BackgroundFill(color, (CornerRadii)null, (Insets)null);
titleLabel.setBackground(new Background(new BackgroundFill[]{var16}));
return null;
}
}, (WritableImage)null);
}
以前有人遇到过这个问题吗?如果你想看到我的整个代码(数十个类),我可以将你添加到我的BitBucket仓库来查看它。
答案 0 :(得分:0)
你的头衔位于哪里?
与https://bitbucket.org/controlsfx/controlsfx/issues/441/background-color-of-borders-is-incorrect中显示的一样,背景是直接计算的。
因此,如果你的边界正在移动,或者出现在另一个东西之上,我们可能会遇到选择错误颜色的问题。我将很快在ControlsFX中解决这个问题