2017-02-17 8 views
1

많은 구성 요소가있는 일반 FXML이 있지만 단순화를 위해 textArea라고 말할 수 있습니다.Java 재사용 일반 FXML

<?xml version="1.0" encoding="UTF-8"?> 

<?import javafx.scene.control.TextArea?> 


<TextArea fx:id="test" prefHeight="200.0" prefWidth="200.0" promptText="test data" xmlns="http://javafx.com/javafx/8.0.101" xmlns:fx="http://javafx.com/fxml/1" /> 

이 textArea에는 "test"라는 ID가 있습니다.

제 질문은 컨트롤러 이상에서이 FXML을 재사용 할 수 있습니까?

public abstract class GenericController { 
    Program program = Program.getInstance(); 
    @FXML TextArea test; 


    @FXML 
    abstract void initialize(); 
    abstract void setData(); 




} 

그리고 GenericController에 FXML 포인트 : 아래와 같이

내 초기 생각은 일반 컨트롤러를 통해이었다. 그리고 나서 은 더 구체적인 컨트롤러에서을 확장합니다. 하지만 난 그냥 LoadExceptionError fx : controller = "sample.Controllers.GenericController"에서 오류가 발생합니다.

답변

2

컨트롤러를 FXML 파일에 지정하지 마십시오. 즉, fx:controller 속성을 완전히 제거하십시오. 그런 다음 FXML를로드 할 때 컨트롤러를 설정합니다

FXMLLoader loader = new FXMLLoader(getClass().getResource("path/to/generic.fxml")); 
GenericController controller = new SpecificControllerImplementation(); 
loader.setController(controller); 
Parent root = loader.load(); 
+0

이 필요한 경우 (예를 들어, 당신은 의존성 주입 프레임 워크와 결합 수) 당신이 컨트롤러 팩토리를 사용 할 수있는 고급 것들이다, 그러나 이 소리는 당신이 필요로하는 것에 충분할 것입니다. –

+0

방금 ​​시도하고'javafx.fxml.LoadException : 컨트롤러가 지정되지 않았습니다. ' – audittxl

+0

@audittxl 그럼 당신은 뭔가 잘못하고 있습니다. 정적 인'load (URL)'메소드가 아닌, 인자가없는'load()'메소드를 호출하고 있습니다. –