したがって、ControlsFX という名前の境界線を作成すると、この奇妙な不具合が発生します。
「hi」の周りに白い部分が見えますか?それはそこにあるとは限りません。奇妙なことに、同じ境界線 (新しいインスタンス) を別の に追加するとTab
、正常になります:
境界線を生成するコードは次のとおりです。
Node calculateBorderd2 = Borders.wrap(new TextField()).etchedBorder().title("hi").buildAll();
bottomBorderPane.setRight(calculateBordered2);
これは私のプログラムでのみ再現可能です。mcve を作成しようとしましたが、前述のとおり、再現できませんでした。2 番目の境界線を追加すると、問題が 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 リポジトリに追加して、すべてを表示することができます。