私はビデオ解析システムを作成しています。現時点では、私はJavaFXを使用してプレーヤー自体に取り組んでいます。私のプレーヤーの横には、分析中に配置されたマークのリストがあります(写真参照)。私はそれをしたいどのようにJavaFX:VBox内のラベルが重複する
:
しかし、それが重なって...
それはこのに達するまで:
リストは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);
}
}
:次の行を削除します。関連性のないコメント:ボタンではなくクリック可能なラベルを使用するのはなぜですか?レイアウトプロパティではなく翻訳に基づいてラインのベース位置を設定するのはなぜですか?なぜセパレータではなくラインを使うのですか?ラベルの高さに基づいて行startXとstartYを設定するのは変です。スクロールペイン、スクロールペイン領域、または表示していない他のコンテナやノードセットにいくつかの制約を設定しないかぎり、コントロールはそんなに上手くいってはいけません。 – jewelsea
@jewelseaさて、ラインは本当に奇妙なものです...まだ笑いを学んでいます。私はオブジェクトをボタンに変えましたが、それでも彼らは踏み込んでしまいました。より良い画像を得るために私からどのような情報が必要ですか? – BlackFayah
mcveを供給してください。提供されたリンクを読んでください。 mcveは、問題を複製するだけの最小限の完全なコードです(例えば、ビデオコントロールやそのようなものは一切必要ありません。スクロールペインにボタンを押し込んだスタンドアロンアプリケーションだけです)。ペーストして問題を再現します。 – jewelsea