내 문제는 다음과 같습니다. 가로 방향과 그의 콘텐츠 (예 : FlowPane)에 맞는 너비를 가진 Pane을 얻고 싶지만 너비가 너무 높으면 Pane이 콘텐츠를 래핑합니다. 아이들 너비가 많기 때문에 'prefWidth'또는 'prefWrappingLength'를 계산하고 싶지 않습니다.
스레드 JavaFX FlowPane Autosize 에서는 텍스트 배치에 대한 솔루션을 제공하지만 레이아웃에는 해당되지 않습니다.
저를위한 몇 가지 팁이 있습니까?
대답을 찾고있는 사람들을 위해, 여기에 내가 마침내 한 많은 아이들의 제약을 무시하고 다음과 같이했습니다.
class RuleBox extends FlowPane {
int maxWrapLength;
int margin = 30;
RuleBox(int maxWrapLength) {
super();
this.maxWrapLength = maxWrapLength;
getChildren().addListener((ListChangeListener<? super Node>) observable -> actualizeWrapLength(observable.getList()));
}
private void actualizeWrapLength(ObservableList<? extends Node> list) {
new Thread(() -> {
try { Thread.sleep(50);
} catch (InterruptedException ignored) {}
Platform.runLater(() -> {
int totalWidth = 0;
for(Node n : list) {
if(n instanceof Control) totalWidth+=((Control)n).getWidth();
else if(n instanceof Region) totalWidth+=((Region)n).getWidth();
}
if(totalWidth+margin>maxWrapLength) setPrefWrapLength(maxWrapLength);
else setPrefWrapLength(totalWidth+margin);
});
}).start();
}
void actualizeWrapLength() {
actualizeWrapLength(getChildren());
}
}
이것은 특히 Thread.sleep(50)
아이들의 최종 너비를 갖는 데 사용되는 매우 더러운 코드 입니다. 따라서 누군가가 더 나은 솔루션을 소유하고 있다면 제공하십시오!
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다