2013-05-08 4 views
1

SceneBuilder에서 작동하는 JavaFX2의 디자인 타임을 감지하는 방법이 있습니까? 유사한 내용 :JavaFX의 디자인 타임 감지

java.beans.Beans.isDesignTime() 

스윙 용? SceneBuilder에 표시되어야하는 사용자 정의 컨트롤을 개발 중입니다. 그러나 ClassNotFoundException 트리거의 일부 코드. 필요한 라이브러리를 추가하고 싶지 않고 그 예외를 트리거하는 코드를 무시하고 싶습니다.

내가 달성하기 위하여려고하고 무엇을 말해주지

[업데이트]. 나는 입력 컨트롤 컴포넌트 (텍스트 필드, 콤보 박스 등)를 확장하고 propertyName 속성을 추가한다. 또한 폼 확장 패널을 만들었습니다.이 패널은 입력 컨트롤을 스캔하여 propertName을 기반으로 값을 지정합니다. 값은 양식에 설정된 POJO에서 가져옵니다. 나는 아파치 commons beanutls를 사용하여 값을 입력 컨트롤에 할당하므로 bean utils jar에 classpath를 제공해야한다.

자동으로 해당 기능을 활성화하면 SceneBuilder에서 Form을 사용할 수 없습니다. 폼이 입력 컨트롤을 감지하고 할당 할 때 라이브러리가 필요하기 때문입니다. 필자는이 기능을 비활성화하고 프로그래머가 활성화 할 수있는 방법을 제공하기로 결정했습니다. 내가 원하는 것이 아니라 선택의 여지가 없다고 생각합니다.

답변

0

FXML은 항상 디자인 타임입니다. FXML에서 컨트롤을 디자인하고 컨트롤러에서 모든 로직 및 이벤트 처리를하면 무료입니다.

1

JavaFX 컨트롤에는 디자인 타임이 없습니다.

대신이 제어 코드는이 대답에 설명 된 몇 가지 간단한 규칙을 따라야합니다. 메일 링리스트 스레드 custom controls in SceneBuilder에서 인용

:

SceneBuilder 1.0은 SceneBuilder의 라이브러리 패널에 사용자 지정 컨트롤을 추가 할 아직 가능하지 않다. 그러나 사용자 정의 컨트롤이 포함 된 FXML을로드 할 수 있습니다. 이 SceneBuilder의 사용 설명서에 설명되어 있습니다 -이 사용자 정의 유형의 요소 섹션을 참조하십시오 : SceneBuilder에서 사용자 지정 요소 을 포함하는 FXML를로드 할 수있는 내용은 해당 사용자 정의 요소가 아니라 "해야한다는

http://docs.oracle.com/javafx/scenebuilder/1/user_guide/library-panel.htm

주 행동 "했다.

  1. 특수 빌더 팩토리가 필요하지 않습니다.
  2. 공용 비어있는 생성자가 있어야합니다.
  3. 이 FXMLLoader 사용자 정의 구성 요소가 를로드 있는 클래스 로더를 사용하도록 구성해야 다음, 일부 중첩 된 FXML 파일을로드 할 FXMLLoader를 사용하는 경우
  4. (이 마지막 요구 사항 뒤에 피투성이 자세한 내용은 https://forums.oracle.com/forums/thread.jspa?forumID=1385&threadID=2433150 참조) 대신에 나는 전자 방아쇠 코드를 우회하도록하려면,

    내가 필요한 라이브러리를 추가하고 싶지 않은 :

몇 가지 추가 사항에 응답하려면 xception.

Custom and Unknown Element Types section of the SceneBuilder User Guide에는 사용자 지정 컨트롤에서 사용하는 클래스에 대한 경로를 제공하지 않으면 일반적으로 fxml이 여전히 SceneBuilder에서로드됩니다. 라이브러리가 제공되면 SceneBuilder는 추가 기능을 제공합니다 (씬 빌더는 컨텐츠 패널과 계층 구조 패널에서 렌더링 할 수 있어야합니다).

내 생각에 사용자 지정 컨트롤은 제품의 1.0 릴리스가 아닌 recent 1.1+ build of SceneBuilder을 사용하여 최상의 지원을 얻습니다.

0

당신은이 클래스를 사용할 수 있습니다 : 당신의 코드에서

public class SceneBuilderHelper 
{ 
    public static boolean isSceneBuilder() 
    { 
     try 
     { 
      Class.forName("com.oracle.javafx.scenebuilder.app.SceneBuilderApp"); 
      return true; 
     } 
     catch (ClassNotFoundException e) 
     { 
     } 

     return false; 
    } 
} 

당신은이 작업을 수행 할 수 있습니다 :

if (!SceneBuilderHelper.isSceneBuilder()) 
{ 
    // do things that should not be done in SceneBuilder 
}