JavaFX로 시작하기 때문에 실수를 저 지르지 마십시오.prefWidth = "Infinity"인 GridPane의 단추 JavaFX
나는 두 개의 버튼을 서로 옆으로 늘려 창 전체 너비에 걸쳐 사용하고자하는 GridPane
을 가지고 있습니다. 그래서 한 행과 두 개의 열로 GridPane
을 만들고 두 개의 버튼에 추가했습니다. 그것에 대해
코드 :
<GridPane id="GridPane" alignment="TOP_LEFT" disable="false" gridLinesVisible="false" hgap="5.0">
<children>
<Button mnemonicParsing="false" styleClass="add-button" text="Save" GridPane.columnIndex="0" GridPane.rowIndex="0" />
<Button mnemonicParsing="false" text="Discard" GridPane.columnIndex="1" GridPane.rowIndex="0" />
</children>
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
</rowConstraints>
</GridPane>
하지만 지금은 버튼 만 자신의 필요 공간을 차지합니다. 그래서 나는 그들 모두에 prefWidth="Infinity"
을 추가했다. 그 결과 Secene Builder 1.1이 즉시 멈 춥니 다. 나는 장면 빌더 (Scene Builders)가 버그가 있고 아마도 버그가 있다고 들었고 그래서 그것을 손으로 FXML에 코드화하고 프로그램을 실행하려고 시도했다. 프로그램이 시작되지만 창을 열지 않습니다.
jvisualvm
으로 실행중인 프로세스를 검사하면 JavaFX 응용 프로그램 스레드가 엄청난 양의 공간을 할당하고 있음을 알 수 있습니다 (수천 개의 ArrayList
은 즉시 가비지 수집됩니다). 약 1.2GB/s를 할당합니다. 장면 빌더는 사용 된 힙이 약 16MB 정도로 일정하여 (창을 열지 않음) 파일을 열려고 할 때 아무 것도하지 않는 것처럼 보입니다.
Button
에 prefWidth
만 추가 된 경우에도 오류가 발생합니다. 예를 들어 두 단추 모두에 prefWidth="100000000"
을 사용하면 원하는 결과를 얻지 만 이것이 실제로 잘못된 코딩이라고 느낍니다.
그래서 제 질문은 다음과 같습니다
- 이 자바 FX의 오류인가?
- 원하는 결과를 더 좋은 방법으로 얻는 방법은 무엇입니까?
확인 설정'의 maxWidth = "무한대"'참으로 내 문제를 해결 않습니다. 그러나 나는 당신의 설명을 완전히 이해하지 못합니다. 내가 보는 방법은'maxWidth = "Infinity"를 설정하는 것입니다. JavaFX에 "기본적으로 내 너비에는 상한선이 없습니다"라고 설정하고'prefWidth = "Infinity"를 설정함으로써 이봐 요. 나는 거대하게되고 싶습니다. 너비 (그러나 그것은 요구 사항은 아닙니다) "JavaFX가 절약 할 수있는만큼의 공간을 제공하기로 결정할 수 있습니다. 그러나 이것은 어떻게 든 에러 메시지 나 아무것도없이 전체 과정을 깨뜨린다. – mgttlinger
또한 'maxWidth'가 기본값 당'prefWidth'와 같은 경우 왜 작동하지 않습니까? – mgttlinger
@mgttlinger prefSize는 '추상'값을 가지지 않으므로 픽셀 단위로 명시 적으로 지정해야합니다. 가능한 경우 javafx는 해당 값을 위젯에 사용합니다. '무한'은 성장을 표현하는 바로 가기이므로 비교 가치로만 사용해야합니다.javafx가 Integer.MAX_VALUE를 사용하여 widget을 그려서 prev 너비로 만들었다 고 생각합니다. 그러면 JVM이 종료됩니다. – zenbeni