2012-10-13 12 views
16

Mi piacerebbe avere un'applicazione in cui ho completamente personalizzato l'aspetto della finestra. Finora ho imparato che posso rimuovere la roba tipica finestra con:JavaFX interamente personalizzato Windows?

class Application extends javafx.application.Application { 
    /** 
    * Starts the application. 
    * 
    * @param stage 
    */ 
    override def start(stage: Stage) { 
    stage.initStyle(StageStyle.TRANSPARENT) 

    // Load the main window view. 
    val loader = new FXMLLoader() 
    loader.setLocation(getClass.getResource("/com/myproj/application/MainWindow.fxml")) 

    val root = loader.load().asInstanceOf[Parent] 
    val scene: Scene = new Scene(root, Color.TRANSPARENT) 

    stage.setScene(scene) 
    stage.show() 
    } 
} 

tutto il resto funziona bene, tranne quella finestra trascinamento, fare doppio click-to-massimizzare, trascinando a schermo bordo superiore su Windows dovrebbe attiva massimizzare, ecc. Le funzionalità native Window sono completamente mancanti.

Posso in qualche modo piuttosto facilmente personalizzare l'intero aspetto della finestra senza perdere tutte queste belle funzionalità.

Sto parlando di qualcosa di simile ad Adobe Photoshop che sembra completamente diverso ma conserva ancora queste funzionalità (o le implementa sulla loro interfaccia utente manualmente).

Sarebbe un inizio se potessi almeno implementare i pulsanti di trascinamento + finestra per gli avviatori. Mi sto occupando di Linux, Mac e Windows qui.

risposta

15

Vedere l'aspetto e la gestione della finestra personalizzata nello Ensemble Sample application, che include il codice sorgente. Scarica il source, lo compila ed eseguilo come applicazione autonoma anziché incorporata in un browser. Non sarà esattamente quello che stai chiedendo, perché roba simile al trascinamento sullo schermo per attivare la massimizzazione non funziona, credo, ma dovrebbe essere molto vicino e potresti sempre codificare qualcosa che massimizza la finestra quando è stato trascinato vicino al bordo superiore. La finestra di Ensemble ha caratteristiche come le decorazioni di ridimensionamento personalizzate, minimizza, ingrandisci, chiudi le icone, un'area nella parte superiore della finestra che puoi usare per trascinare la finestra o doppio clic per ingrandire o ridurre a icona la finestra, cioè la maggior parte delle funzioni standard si aspetterebbe da un sistema di finestre desktop.

Per ottenere qualcosa di ancora più vicino a ciò che stai chiedendo, forse potresti creare qualcosa insieme creando due finestre. Uno, una finestra di scena decorata standard che include i bordi dello schermo, l'altra una fase secondaria non decorata o trasparente sempre visualizzata in cima alla finestra principale e sovrapposta ai bordi della finestra principale con un rendering personalizzato. Penso che potresti incontrare delle difficoltà nel tentativo di implementare questo approccio, quindi non lo consiglierei davvero.

Potrebbe essere utile provare uno stile di stage NON DECORATO anziché TRANSPARENT e vedere se si ottiene un'integrazione nativa con Windows.

ci sono alcune funzionalità richiesta aperta attualmente prevista per JavaFX per essere spediti con JDK8, Windows: support Aero Glass effects for top-level windows, Mac: Support NSTexturedBackgroundWindowMask style for windows e The solid white background created in a Stage should be created - if needed - in the Scenegraph, che, una volta attuata, probabilmente aiuterà a acheive il vostro obiettivo - votare per loro, se tali caratteristiche sono importanti per tu.

Ensemble Sample Application

checkout anche VFXWindows che è un framework finestre open source per JavaFX.

Aggiornamento

Anche in relazione è il progetto Undecorator che permette di creare facilmente una fase JavaFX con standard di minimizzare/massimizzare/chiudere/ridimensionare controlli cromati che sono resi attraverso il motore JavaFX piuttosto che il sistema operativo a finestre . Questo ti permette di ottenere il tipo di controllo personalizzato sul rendering della finestra che visualizza un'applicazione come Ensemble.

+1

Aggiunta se non si desidera utilizzare il decespugliatore [Sample Custom Decorator] (https://gist.github.com/JaDogg/4d9999ba233f4a43b7c5) –

Problemi correlati