2016-05-10 21 views
1

私はビデオ解析システムを作成しています。現時点では、私はJavaFXを使用してプレーヤー自体に取り組んでいます。私のプレーヤーの横には、分析中に配置されたマークのリストがあります(写真参照)。私はそれをしたいどのようにJavaFX:VBox内のラベルが重複する


How I want it

しかし、それが重なって...
But then it overlaps...

それはこのに達するまで:
Until it gets to this

リストはScrollPane内のVBox内で作成されます。私は既にLabelオブジェクトの代わりにTextオブジェクトを使用することを検討しましたが、私は本当に背景プロパティを使用する必要があるので、ラベルを使用したいと思っています。

このコードは、私の問題を再現:

package application; 

import javafx.application.Application; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.geometry.Insets; 
import javafx.scene.Cursor; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.ScrollPane; 
import javafx.scene.control.Separator; 
import javafx.scene.control.ScrollPane.ScrollBarPolicy; 
import javafx.scene.input.MouseEvent; 
import javafx.scene.layout.AnchorPane; 
import javafx.scene.layout.VBox; 
import javafx.stage.Stage; 

public class Test extends Application { 

    final Button button = new Button("Click me!"); 
    final VBox vb = new VBox(); 
    final ScrollPane sp = new ScrollPane(vb); 

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

    @Override 
    public void start(Stage primaryStage) { 
     AnchorPane root = new AnchorPane(); 
     VBox v = new VBox(); 
     v.getChildren().addAll(button, sp); 
     root.getChildren().add(v); 

     sp.setFitToHeight(true); 
     sp.setFitToWidth(true); 
     sp.setMaxHeight(150); 
     sp.setHbarPolicy(ScrollBarPolicy.NEVER); 
     sp.setVbarPolicy(ScrollBarPolicy.ALWAYS); 

     button.setOnAction(new EventHandler<ActionEvent>() { 
      @Override 
      public void handle(ActionEvent event) { 
       addButton(); 
      } 
     }); 

     primaryStage.setScene(new Scene(root, 300, 250)); 
     primaryStage.show(); 
    } 

    public void addButton() { 
     Button btn = new Button(); 
     btn.setStyle("-fx-background-color: null"); 
     btn.setPadding(Insets.EMPTY); 
     String text = "Time: 00:00\nIt's very late!"; 
     btn.setText(text); 
     btn.setOnMousePressed(new EventHandler<MouseEvent>() { 
      @Override 
      public void handle(MouseEvent event) { 
       btn.setStyle("-fx-background-color: #87CEFA"); 
      } 
     }); 
     btn.setOnMouseReleased(new EventHandler<MouseEvent>() { 
      @Override 
      public void handle(MouseEvent event) { 
       btn.setStyle("-fx-background-color: null"); 
      } 
     }); 
     btn.setCursor(Cursor.HAND); 
     Separator sep = new Separator(); 
     vb.getChildren().addAll(btn, sep); 
    } 
} 
+0

:次の行を削除します。関連性のないコメント:ボタンではなくクリック可能なラベルを使用するのはなぜですか?レイアウトプロパティではなく翻訳に基づいてラインのベース位置を設定するのはなぜですか?なぜセパレータではなくラインを使うのですか?ラベルの高さに基づいて行startXとstartYを設定するのは変です。スクロールペイン、スクロールペイン領域、または表示していない他のコンテナやノードセットにいくつかの制約を設定しないかぎり、コントロールはそんなに上手くいってはいけません。 – jewelsea

+0

@jewelseaさて、ラインは本当に奇妙なものです...まだ笑いを学んでいます。私はオブジェクトをボタンに変えましたが、それでも彼らは踏み込んでしまいました。より良い画像を得るために私からどのような情報が必要ですか? – BlackFayah

+0

mcveを供給してください。提供されたリンクを読んでください。 mcveは、問題を複製するだけの最小限の完全なコードです(例えば、ビデオコントロールやそのようなものは一切必要ありません。スクロールペインにボタンを押し込んだスタンドアロンアプリケーションだけです)。ペーストして問題を再現します。 – jewelsea

答えて

2

あなたの問題はあなたがスクロール区画のビューポートの高さにScrollPaneの内容の高さに合わせていることです。これをしないでください。 [MCVE](http://stackoverflow.com/help/mcve)なしで何が起こっているのかはかなり不明であるとしてこれは本当に答えることは非常に困難である

sp.setFitToHeight(true); 
+0

はい、これは動作します。さらに、元のプロジェクトでVBoxのすべてのサイズプロパティを削除する必要がありました。ありがとう! – BlackFayah

関連する問題