2017-04-27 10 views
1

특정 사용자 작업 후에 알림 창을 표시하고 싶습니다. 내 응용 프로그램에는 여러 장면이 있으며 NotificationPane이 현재 활성 장면에 표시되어야합니다.알림 창이 장면에 나타나지 않습니다.

모든 것이 알림과 함께 작동하므로 필요한 경우 팝업됩니다. 그러나이 작업을 NotificationPane에 대해 수행하는 방법을 알 수 없습니다. 내가 지금까지 만든

단계 : - 작동

  • 내 현장에 직접 NotificationPane을 넣어 show() 전화 tryed. 그것이 작동하지 않는 내가 왜 아무 생각이 -
  • 이제 아이디어, stage.getScene().getRoot()를 호출하여 현재 창을 얻을 NotificationPane로 포장 한 후 show()를 호출하는 것입니다.
  • ((BorderPane) pane).setCenter(new Label("TEST"));이 라인은 너무 stage.getScene().getRoot()

내가 동작을 테스트하는 간단한 프로그램을 만들어 올바른 개체를 반환, 텍스트 레이블과 버튼을 대체하고있다. NotificationPane을 호출하는 단추 하나. 제안 사항이 있으십니까? 지금 문제를 참조

package application; 

import org.controlsfx.control.NotificationPane; 

import javafx.application.Application; 
import javafx.geometry.Pos; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.layout.BorderPane; 
import javafx.scene.layout.VBox; 
import javafx.stage.Stage; 

public class Main extends Application { 

    public static void main(String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(Stage primaryStage) { 
     Button notificationPaneButton = new Button("NotificationPane"); 
     notificationPaneButton.setOnAction(e -> showNotificationPane(primaryStage, "Notification text")); 

     VBox vbox = new VBox(5); 
     vbox.setAlignment(Pos.CENTER); 
     vbox.getChildren().addAll(notificationPaneButton); 

     BorderPane borderPane = new BorderPane(); 
     borderPane.setCenter(vbox); 

     primaryStage.setTitle("Notifications test"); 
     primaryStage.setScene(new Scene(borderPane, 300, 200)); 
     primaryStage.show(); 
    } 

    public void showNotificationPane(Stage stage, String message) { 
     Parent pane = stage.getScene().getRoot(); 
//  ((BorderPane) pane).setCenter(new Label("TEST")); 
     NotificationPane notificationPane = new NotificationPane(pane); 
     notificationPane.setText(message); 
     if (notificationPane.showingProperty().get()) { 
      notificationPane.hide(); 
      System.err.println("hide"); 
     } else { 
      notificationPane.show(); 
      System.err.println("show"); 
     } 

    } 
} 

답변

1

확인 :

여기 내 테스트 프로그램입니다. 현재 창을 감싸는 것만으로는 충분하지 않습니다. 또한 NotificationPane을 장면에 추가해야합니다. 권리?

어쨌든 내 현재의 솔루션은 다음과 같은있다 :

  • 현재 창을 얻을 현재 장면을 얻을
  • 랩 창
  • 포장을 방지하기 위해 새

과 현재 장면을 대체 NotificationPane 여러 번 나는 현재 창이 이미 NotificationPane인지 확인한 다음 c 모두 show().

public void showNotificationPane(Stage stage) { 
    Scene scene = stage.getScene(); 
    Parent pane = scene.getRoot(); 
    if (!(pane instanceof NotificationPane)){ 
     NotificationPane notificationPane = new NotificationPane(pane); 
     scene = new Scene(notificationPane, scene.getWidth(), scene.getHeight()); 
     stage.setScene(scene); 
     notificationPane.show(); 
    } else { 
     ((NotificationPane)pane).show(); 
    } 
}