2014-09-02 83 views
-2

在C#中這是通過使用委託和事件完成的,這裏是鏈接:Passing Data between Windows Forms如何在2個或更多ACTIVATED JFrame之間傳遞數據?

我的要求是這樣的。用戶必須通過將數據庫中的全部項目加載到新表單的JTable來搜索項目代碼,單擊主窗體(或任何其他窗體)中的按鈕即可顯示此新窗體。之後,用戶雙擊表格中的特定項目代碼,並將該項目代碼傳遞給主窗體(或任何其他窗體)的文本字段並關閉當前表單。

這裏是從C#https://www.youtube.com/watch?v=_lPkc1YV2vQ&feature=youtu.be

+0

請參閱[使用多個JFrames,好/壞實踐?](http://stackoverflow.com/q/9554636/418556) – 2014-09-02 17:11:33

+0

@AndrewThompson:對於OP的功勞,這似乎是一個體面的地方一個模態對話框。 – 2014-09-02 17:13:56

+0

@HovercraftFullOfEels ..你幾乎寫道,像模態對話框沒有在鏈接的問答中提到。 – 2014-09-02 17:16:07

回答

1

第二窗口不應該是一個JFrame輸出,而是一個JDialog,可能模態。如果它是模態的,那麼調用窗口將知道第二個對話窗口何時關閉,因爲程序流程在顯示對話框時立即停止在調用代碼處(考慮JOptionPanes如何工作),並且直到第二個對話窗口關閉纔會恢復。正確的是,您將從與對話框窗口關聯的對象中提取相關數據,並且可以通過簡單的方式獲得此信息,例如通過調用適當的getter方法。

例如,

JDialog someDialog = new JDialog(myJFrame, "My Dialog", ModalityType.APPLICATION_MODAL); 
someDialog.add(myContentPaneWithMyGui); 
someDialog.pack(); 
someDialog.setVisible(true); 

// here code flow stops until the dialog is no longer visible. 

// now call my getter to extract data 
SomeType someData = myContentPaneWithMyGui.getSomeData(); 
+0

我已經在C#中這樣做了這個https://www.youtube.com /watch?v=_lPkc1YV2vQ&feature=youtu.be。你可以告訴我用Java來做這件事:) – Macmarc25 2014-09-02 17:59:38

+0

@ Macmarc25:我以爲我剛剛做過。 – 2014-09-02 20:02:45

+0

什麼是myJFrame和myContentPaneWithMyGui? – Macmarc25 2014-09-03 14:24:36

1

如果你想堅持做你的事件/委託的方式,你可以考慮使用BeansBinding

它需要您的模型在數據更改時觸發事件,並將Swing GUI元素寄存器添加爲這些模型上的propertyListener。

+0

對於原始海報Macmarc25,這是支持MVC(模型 - 視圖 - 控制)設計的絕佳答案。 1+ – 2014-09-02 20:03:43

+0

是的,但對你想做的事情有點矯枉過正... JDialog是一種更好/更簡單的答案。 – JSlain 2014-09-02 22:33:52