2017-09-28 8 views
6

EDIT: 私は元の質問を以下のように残しました。以下のAnchorFXソースコードと私のコードを使用して問題をテストしたい場合は、問題を再現できるはずです。それは他の状況でも起こり、次の2つの質問の問題に似ています。Resize SwingNode in PaneHow to resize Swing control which is inside SwingNode in JavaFX8?どちらの回答も私にとって有益ではありませんでしたが、SwingNodeの親のサイズ変更時にSwingNodeのコンテンツのサイズが変更されない


私はJScrollPane内部JTableを持っていると私は、JavaFXアプリケーションにそれを埋め込む必要があります。私はAnchorFX docking frameworkを使ってこれをしようとしています。私もこのSwingNodeをControl(私が試した2つはScrollPaneSplitPaneです)の中に入れる必要がありますので、アプリケーションの残りの部分と一貫してContextMenuを追加することができます。

問題は、タブをドッキング解除したり、ウィンドウ内のウィンドウやペインのサイズを変更したりするときに、テーブル内のテーブルを持つJScrollPaneが適切にサイズ変更されないことです。

私は私の問題を表示するAnchorFXプロジェクトからのデモの1を変更した

public class AnchorFX_substations extends Application { 

@Override 
public void start(Stage primaryStage) { 

    DockStation station = AnchorageSystem.createStation(); 

    Scene scene = new Scene(station, 1024, 768); 

    DockNode node1 = AnchorageSystem.createDock("Node", generateJTableNode()); 
    node1.dock(station, DockNode.DockPosition.CENTER); 

    DockNode subNode = AnchorageSystem.createDock("subNode 1", generateJTableNode()); 
    subNode.dock(station, DockNode.DockPosition.LEFT); 
    subNode.floatableProperty().set(false); 

    DockNode subNode2 = AnchorageSystem.createDock("subNode 2", generateJTableNode()); 
    subNode2.dock(station, DockNode.DockPosition.LEFT); 

    AnchorageSystem.installDefaultStyle(); 

    primaryStage.setTitle("AnchorFX SubStation"); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 

private Control generateJTableNode() { 
    ScrollPane contextMenuPane = new ScrollPane(); 
    SwingNode swingNode = new SwingNode(); 
    DefaultTableModel model = new DefaultTableModel(); 
    JTable table = new JTable(model); 

    // Create a couple of columns 
    model.addColumn("Col1"); 
    model.addColumn("Col2"); 

    // Append a row 
    for(int i = 0; i < 200; i++) { 
     model.addRow(new Object[]{"col 1 row " + i, "col 2 row "+i}); 
    } 
    JScrollPane scrollPane = new JScrollPane(table); 
    swingNode.setContent(scrollPane); 
    contextMenuPane.setFitToHeight(true); 
    contextMenuPane.setFitToWidth(true); 
    contextMenuPane.setContent(swingNode); 
    return contextMenuPane; 
} 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 
    launch(args); 
} 

} 

答えて

5

だから、SwingNodeが適切自体のサイズを変更する親を持っている、判明したが、リサイズされなかった自分自身をSwingNode、それその内容に基づいてサイズが決定されます。私はDockNodeがドッキングまたはドッキング解除された場合は、次の呼び出しを行うことによって、これを解決:

swingNode.setContent(swingNode.getContent()); 
int width = (int) swingNode.getParent().getBoundsInParent().getWidth(); 
int height = (int) swingNode.getParent().getBoundsInParent().getHeight(); 
swingNode.getContent().setPreferredSize(new Dimension(width, height)); 

私はなぜSwingNodeの内容は、それを解決する助けリセット全くわからないんだけど、ので、私はその行を残している助けるように見えましたそこ。

奇妙なSwingNodeのサイズ変更の問題で困っている人を助けるために、私は後でこの問題を編集するかもしれません。なぜなら、今は特に検索可能だとは思わないからです。

関連する問題