假设我们有一个JFrame frame
,其中包含两个JPanel,buttonPanel
和dataPanel
,并且在此面板中包含一个JButton button
。点击后,button
会在自己的窗口中创建并显示JDialog dialog
(照例)。使用几个JTextFields和一个提交按钮,JDialog dialog
创建一个封装这些输入数据的新对象dataObject
。如果我们希望主应用程序dataPanel
中的frame
JPanel显示此dataObject
,那么应该如何将dataObject
正确地传递给驻留在外部JFrame中的JPanel?
在写这篇文章的时候对我来说是满口的,所以我会试着澄清一下:
JFrame frame
dataPanel
- 用于显示来自JDialog buttonPanel
- 包含一个用于打开JDialog的按钮,其中将输入一些信息,并且使用所述信息构建我们的对象dataObject
。此处的目标是将此dataObject
(及其组成字段)传递给要显示的dataPanel
。处理这个问题最合适的方法是什么?我考虑将对象保持在dataPanel
静态,然后从JDialog调用静态方法来添加新对象,但这似乎不适合做。
一些指导?
答案 0 :(得分:2)
很大程度上取决于程序的结构,包括对话框的行为方式:
public DataObject getDataObject()
方法,调用代码在对话框返回后可以调用该方法,允许显示对话框的类在需要时提取相关信息。例如,模态对话框返回:
// caveat: code has not been tested by compilation or running.
JButton myButton = new JButton(new AbstractAction("Show Dialog Button") {
public void actionPerformed(ActionEvent evt) {
MyDialogPanel myDialogPanel = new MyDialogPanel();
JDialog myDialog = new JDialog(myJFrame, "My Dialog",
ModalityType.APPLICATION_MODAL);
myDialog.add(myDialogPanel);
myDialog.pack();
myDialog.setLocationRelativeTo(myJFrame);
myDialog.setVisible(true);
// dialog now returns and we can get the data
// assuming that the wrapper object for your data
// is called "DataObject"
DataObject dataObject = myDialogPanel.getDataObject();
// and perhaps use it. Assume setDataObject is a method
// of the main GUI that displays the data object
setDataObject(dataObject);
}
});