2017-09-28 15 views
6

DÜZENLEME: Asıl sorumumu aşağıda olduğu gibi bıraktım. AnchorFX kaynak kodunu ve aşağıdaki kodumu kullanarak sorunu test etmek isterseniz, sorunu yeniden oluşturmalısınız. Diğer bazı durumlarda da gerçekleşir ve bu iki sorudaki sorunlara benzer: Resize SwingNode in Pane ve How to resize Swing control which is inside SwingNode in JavaFX8? Hiçbiri cevapları bana yardımcı oldu, ama belki de bulduğum cevap gelecekte başkalarına yardım edecek. SwingNode öğesinin üst öğesi yeniden boyutlandırılmadığında SwingNode içeriği yeniden boyutlandırmıyor


Ben JTable JScrollPane bir iç var ve bir javafx uygulama içine gömmek gerekir. Bunu AnchorFX docking framework kullanarak yapmaya çalışıyorum. Ayrıca bu SwingNode'a bir Control (denediğim iki tane ScrollPane ve SplitPane) içerisine de ihtiyacım var, böylece uygulamanın geri kalanıyla tutarlı olan bir ContextMenu ekleyebilirim.

Sorun şu ki, tabloyu kapattığımda ve 'çıkartarak' ya da pencerenin içindeki pencereleri veya pencereleri yeniden boyutlandırdığınızda, tablo içindeki JScrollPane düzgün şekilde yeniden boyutlandırmıyor.

benim problem göstermek için AnchorFX projesinden demolar biri değiştirdiniz:

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); 
} 

} 

cevap

5

yüzden SwingNode uygun kendi boyutunu bir Ebeveyn vardır çıkıyor, ama kendisi bunu, yeniden boyutlandırma değildi SwingNode içeriğine göre boyutlandırılmıştır. Bir DockNode demirledi veya çıkartılmış iken şu çağrılar yaparak bu çözüldü:

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)); 

neden SwingNode içeriğini çözmek yardımcı sıfırlamak tamamen emin değilim, ama o kadar bu çizgiyi terk ediyorum yardımcı gibiydi Orada.

Sorunun, daha sonra, özellikle şu anda özellikle aranabilir olduğunu düşünmediğimden, garip SwingNode yeniden boyutlandırma sorunları tarafından engellenen başkalarına yardımcı olmak için düzenleyebilirim.

İlgili konular