私が開発している javafx アプリケーションは、最終的には解像度 800x480 のハンドヘルド デバイスで実行される予定です。通常、アプリケーションは縦向きモードで実行されますが、一部の機能 (グラフやテーブルの表示など) では、データをより適切に表示するために横向きモードに切り替える必要があります。
私の質問は、90 度の倍数で回転するノードを操作する簡単な方法はありますか?
setRotate() を呼び出すことでテーブルを回転できますが、これによりいくつかの新しい問題が発生します。
回転時に列幅のサイズを変更するには、ユーザーは列分割線を左から右 (ヘッダーの行に直交する方向) にドラッグする必要があります。テーブルは依然としてその幅/高さをその親のサイズに拡張しますが、これも同様に機能しません。 -90 度 (またはその他の 90 の倍数) 回転した場合。
もう 1 つの制約は、チャート コンテンツが BorderPane の中央に含まれ、BorderPane の上部と下部にツールバーが含まれているため、シーン全体が回転しないことです。
これが私の SSCCE です。以下のコードに問題がある場合は、修正してください。
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class TablePanelTrial extends Application {
BorderPane root = new BorderPane();
private boolean isRotated=false;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(final Stage primaryStage) {
primaryStage.setTitle("Table Panel Trial");
final TablePanel tp = new TablePanel();
Button btnRotate = new Button("Rotate");
btnRotate.setOnAction(new EventHandler() {
@Override
public void handle(ActionEvent event) {
double r = -90;
if(isRotated){
r=0;
isRotated = !isRotated;
}
else{
r=-90;
tp.tv.setMinHeight(200);
isRotated = !isRotated;
}
tp.rotate(r);
}
});
root.setTop(btnRotate);
root.setCenter(tp.getVB());
primaryStage.setScene(new Scene(root, 480, 800));
primaryStage.show();
}
class TablePanel{
private VBox vbox = new VBox();
private TableView tv = new TableView();
private String[] labelVal = {"Column 1", "Element", "Difference", "File Name", "Report Number"};
public TablePanel(){
TableColumn column1 = new TableColumn(labelVal[0]);
TableColumn column2 = new TableColumn(labelVal[1]);
TableColumn column3 = new TableColumn(labelVal[2]);
TableColumn column4 = new TableColumn(labelVal[3]);
TableColumn column5 = new TableColumn(labelVal[4]);
tv.getColumns().addAll(column1, column2, column3, column4,column5);
vbox.getChildren().add(tv);
tv.setPrefHeight(2000);
}
public Pane getVB(){
return vbox;
}
public void rotate(double r){
vbox.setRotate(r);
}
}
}