2010-04-07 4 views
3

Je rencontre des problèmes de compréhension des dispositions dans JavaFX. Considérez le code suivant.JavaFX layouts question

 
Stage { 
    title: "ListView test" 
    scene: Scene { 
     width: 400 
     height: 400 
     content: [ 
      VBox { 
       content: [ 
        ListView { 
         height: 200 
         width: 200 
         items: ["item1", "item2"] 
        } 
       ] 
      } 
     ] 
    } 
} 

Je me attendais ListView montrant en 200 x 200 dimension, mais peu importe comment j'essayé de résoudre ce problème, la largeur et la hauteur de ListView semblait figé. Mais le code suivant fonctionne pour montrer ListView comme je l'ai prévu.

 
Stage { 
    title: "ListView test" 
    scene: Scene { 
     width: 400 
     height: 400 
     content: [ 
      ListView { 
       height: 200 
       width: 200 
       items: ["item1", "item2"] 
      } 
     ] 
    } 
} 

Alors, quel est le problème ici? Je ne peux pas utiliser ListView dans les mises en page?

+0

Il semble que les mises en page dans JavaFX soient très endommagées. Je vois quelques bugs rapportés sur HBox, VBox. J'ai également soumis mon observation à JavaFX Jira: RT-8411. Espérons que tout sera corrigé dans le SDK 1.3. – Jhonghee

Répondre

1

Les nœuds de mise en page sont autorisés à modifier la position et la taille de leurs enfants. Définir simplement la largeur et la hauteur d'un enfant et attendre que la mise en page sache qu'il est censé respecter vos nouvelles valeurs n'est pas une bonne chose, ce dont vous avez besoin, c'est de dire au noeud de mise en page les valeurs que vous souhaitez respecter. Jetez un coup d'oeil à la classe LayoutInfo et à la variable layoutInfo dans Node.

+1

Merci. LayoutInfo fonctionne bien pour moi. Je vais m'y habituer, mais il est étrange que vous ayez à le faire même si la largeur et la hauteur sont accessibles en écriture. – Jhonghee

3

Dans JavaFX 1.2.x, les informations de largeur et de hauteur sur le noeud dans la mise en page sont destinées à la lecture. Si vous voulez spécifier l'utilisation de la dimension « préférée »

ListVIew { 
    layoutInfo: LayoutInfo {width: 200, height: 200} 
} 

Ce sera traitée dans la mise en page que la taille préférée et composante sera mise en-ed selon ce. Si vous avez de l'expérience avec NetBeans JavaFX Composer Preview, vous remarquerez peut-être que le code généré utilise un type de liaison spécial qui permet un dimensionnement correct dans la mise en page et dans d'autres conteneurs (Scène, Groupe). Ad Broken: les dispositions de Java FX sont construites sur Node et utilisent une approche algorithmique pour positionner et redimensionner les composants indépendamment de la position géométrique utilisée dans Group/Scene. Malheureusement en 1.2 il apporte une sorte de dualité qui devrait être trompeuse pour les débutants.

+0

Merci pour une bonne explication sur les dispositions. – Jhonghee