저는 JavaFX를 사용하여 UI를 생성하는 Java 프로젝트를 가지고 있습니다. 저는 자바 프로그래머가 아닙니다 (일반적으로 프로그래머가 많지 않습니다 - 저는 CS 학생입니다). 그래서 약간의 학습 경험이 있지만, 일반적으로 제가가는 것처럼 제 자신의 질문에 대답하고 있습니다. 지금은 TableView로 끈적한 지점을 치고 있지만 조금 잃어 버렸습니다. 특히, TableView와의 상호 작용에 대한 응답으로 어떤 종류의 작업도 설정할 수 없습니다.FXML에서 TableView onMousePressed 액션 정의하기
내 프로젝트의 현재 레이아웃은 Main.java, Controller.java 및 UI.fxml입니다. Main에서 창/씬은 프로그램이 시작될 때 UI.fxml에서로드됩니다. (기술적으로는 프로젝트 코드의 다른 여러 비트를 포함하고 있지만, 나는 단지 관련이 무엇을 게시 할 노력하고있어.) 나는있는 TableView 너무로 UI.fxml에서 정의한 :
<TableView fx:id="queueTable">
<columns>
<TableColumn text="Title">
<cellValueFactory>
<PropertyValueFactory property="tableTitle"/>
</cellValueFactory>
</TableColumn>
<TableColumn text="Artist">
<cellValueFactory>
<PropertyValueFactory property="tableArtist"/>
</cellValueFactory>
</TableColumn>
<TableColumn text="Album">
<cellValueFactory>
<PropertyValueFactory property="tableAlbum"/>
</cellValueFactory>
</TableColumn>
</columns>
</TableView>
은 마찬가지로 내가 UI에 정의 된 여러 가지 버튼이 그래서으로의 OnAction와 .fxml :
<Button fx:id="buttonQueueAdd" text="Add" onAction="#addMediaToQueue"/>
를 내 앞의 코드에서 나는 내있는 TableView이 생성되는 방법에서의 TableView의 항목이 선택되었을 때의 이벤트를 정의 할 수 있었다. 그러나 이제 모든 UI 작성은 FXML 파일을 통해 수행됩니다. FXML 파일에는 Controller 클래스가 있는데 (Controller.java), 모든 액션은 다양한 버튼에 대해 정의되어 있지만 FXML에서는 onAction
, setOnMousePressed
등과 같은 속성을 허용하지 않습니다. 파일에 대한 'onAction'속성을 허용하는 것처럼 TableView에 대한 것입니다.
메인 클래스에서 액션을 정의하거나 (장면이 생성 될 때 메인 클래스에서 호출되는 컨트롤러 클래스에 메소드를 생성하는 방법으로) 액션을 정의 할 수있는 것처럼 보입니다. 예를 들어, 더 이상 TableView에 항목을 추가 할 수 없거나 UI가 새로 추가되지 않아 항목이 추가되었다는 것을 나타낼 수 있습니다.
FXML에서 만든 TableView가 없기 때문에 대신 TableView를 만들고 모든 onMousePressed 이벤트 등을 FXML 파일 외부에서 설정하고 내 장면에 추가하도록하는 것이 가장 좋은 해결책 인 것 같습니다. Main 클래스의 start
메소드. 이것이 이전에 행해졌 던 방법이었고, 그때 받아 들일만큼 잘 작동했습니다. 그러나, 그것은 지저분 해 보입니다, 그리고 여러 개의 클래스 및/또는 FXML 파일에 걸쳐 흩어져있는 UI 요소로 이어집니다 - 이것은 여러 다른 학생들과 함께 작업하고있는 프로젝트이며 모든 것을 유선형/조직화 된 상태로 유지하려고합니다. 가능한 한. 나는 총알을 물고 그것을 "지저분한"방식으로해야합니까, 아니면 더 좋은 선택이 있습니까?