所以,我的橡皮筋课上有一个错误,我似乎无法修复。
我基本上要做的是:我有一个borderpane,它是我要调整大小的节点的外部窗格。我为该borderpane分配了一个宽度为1像素的边框(视图CSS)。我还为该边框窗格分配了四个矩形,每个矩形位于一个角(NE,SE,SW,NW)。在此边框中,我具有所谓的“ contentPane”。该窗格包含所有内容(矩形,图像视图等)。
它工作得很好,但是我似乎无法修复错误。
错误:
如果我调整一个像素的大小,则宽度,高度/ x和y会使用未知值进行调整。之后,调整大小就可以了。

RubberBand2.java
package org.displee.javafx.mod;
import javafx.scene.Cursor;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
/**
* A class representing a rubberband that can be used to resize panes.
* @author Displee
*/
public class RubberBand2 {
/**
* The parent of this rectangle.
*/
private final Pane parent;
/**
* The rectangle.
*/
private final Pane node;
/**
* The corner rectangles.
*/
private final Rectangle[] rectangles = new Rectangle[4];
/**
* The last …Run Code Online (Sandbox Code Playgroud) 所以我写了一些非常简单的代码,发现了一个非常意外的行为。所有List和Map实现都使用equals节点的方法进行比较。因此,如果您有一个字符串列表,并且尝试获取列表中字符串的索引,则无需使用同一对象。例:
List<String> list = new ArrayList<>();
list.add("test");
int index = list.indexOf("test");
System.out.println(index);//returns 0
Run Code Online (Sandbox Code Playgroud)
我注意到,Android的所有SparseArray类都使用==而不是equals比较节点。示例方法(LongSparseArray.java):
public int indexOfValue(E value) {
if (mGarbage) {
gc();
}
for (int i = 0; i < mSize; i++) {
if (mValues[i] == value) {
return i;
}
}
return -1;
}
Run Code Online (Sandbox Code Playgroud)
因此,如果您有这样的简单代码:
LongSparseArray<String> localContacts = new LongSparseArray<>();
localContacts.put(2, "test");
int index = localContacts.indexOfValue("test");
System.out.println(index);
Run Code Online (Sandbox Code Playgroud)
此处的索引将返回-1(如果不比较该值,这是非常意外的)。
所以我想知道...为什么Android不使用equals?从Java的角度来看,这是更方便和首选的方式。现在,我必须遍历a的所有值SparseArray并将其与我的自身进行比较,这将导致更多(不需要的)代码(或使用a Map会导致Android性能降低)。