2017-09-28 28 views
6

संपादित करें: मैंने अपना मूल प्रश्न छोड़ दिया है, जैसा कि नीचे था, स्विंग नोड सामग्री का आकार बदलना नहीं है। यदि आप एंकरफैक्स स्रोत कोड और नीचे दिए गए मेरे कोड का उपयोग करके समस्या का परीक्षण करना चाहते हैं, तो आप समस्या को फिर से बनाने में सक्षम होना चाहिए। यह कुछ अन्य परिस्थितियों में भी होता है, और इन दो सवालों के मुद्दों के समान होता है: Resize SwingNode in Pane और How to resize Swing control which is inside SwingNode in JavaFX8? जिनके उत्तरों में से कोई भी मेरे लिए उपयोगी साबित नहीं हुआ, लेकिन शायद मुझे जो उत्तर मिला वह भविष्य में किसी और की मदद करेगा।स्विंगनोड के माता-पिता


मैं एक JTable एक JScrollPane अंदर है और मैं एक JavaFX आवेदन में एम्बेड करने के लिए की जरूरत है। मैं AnchorFX docking framework का उपयोग करके ऐसा करने की कोशिश कर रहा हूं। मुझे इस स्विंगनोड को किसी भी तरह Control के अंदर होना चाहिए (दो मैंने कोशिश की है ScrollPane और SplitPane) ताकि मैं ContextMenu जोड़ सकूं जो शेष एप्लिकेशन के अनुरूप है।

समस्या यह है कि, जब मैं 'डॉक' और 'अनदेखा' टैब करता हूं या खिड़की के अंदर खिड़की या पैन का आकार बदलता हूं, तो JScrollPane इसमें तालिका के साथ ठीक से आकार बदलता नहीं है।

मैं AnchorFX परियोजना से क़ौम में से एक को संशोधित किया है मेरी समस्या को दिखाने के लिए:

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 की सामग्री को इसे हल मदद की यकीन नहीं है, लेकिन यह तो मैं उस लाइन जा रहा हूँ मदद करने के लिए लग रहा था क्या आप वहां मौजूद हैं।

मैं अजीब स्विंगनोड आकार बदलने वाले मुद्दों से किसी और की मदद करने के लिए बाद में प्रश्न संपादित कर सकता हूं, क्योंकि मुझे नहीं लगता कि यह अभी विशेष रूप से खोजने योग्य है।

संबंधित मुद्दे