2013-03-08 88 views
0

我有一个屏幕(JFrame),它从文件中获取它的一些初始人口。但是,如果文件由于某种原因缺失或填充不正确,则许多字段被阻止为不可编辑,并且用户被迫点击设置按钮,这会产生另一个JFrame屏幕。如果用户然后正确地更新文件,我希望原始屏幕重新填充新的文件数据,可以这样做吗?java JFrame更新修正了另一个JFrame

所以我有一个设置按钮的动作侦听器,它调用Java类“设置”。 “设置”有一个按钮“完成”,这将激活数据库/文件更新成功更新/扫除了原有的框架

btnSettings.setText("Settings"); 
    btnSettings.setFont(font4); 
    btnSettings.setBounds(new Rectangle(15, 515, 140, 40)); 
    btnSettings.setToolTipText("Default Settings"); 
    btnSettings.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent evt) { 
      settingsPerformed(); 
     } 
    }) ; 

private void settingsPerformed() { 

    JFrame settings = new Settings(); 
    settings.setVisible(true); 
} 

,然后一个新的类设置

公共类设置来延长JFrame的 实现ActionListener的{

private.....   
public Settings() { 

    this.getContentPane().setLayout(null); 
    this.setSize(new Dimension(450, 340)); 
    this.setTitle("Default Settings"); 

    this.setBackground(new Color(255, 247, 214)); 
    this.setResizable(true); 
    this.setFont(font1); 

    pnlSettingsData.setBounds(new Rectangle(10, 10, 405, 285)); 
    pnlSettingsData.setBorder(BorderFactory.createLineBorder(Color.blue, 1)); 
    pnlSettingsData.setName("Settings"); 
    pnlSettingsData.setLayout(null); 


    btnDone.setText("Done"); 
    btnDone.setFont(font3); 
    btnDone.setBounds(new Rectangle(100, 250, 73, 20)); 
    btnDone.setToolTipText("Click when ready for updating"); 
    btnDone.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        doneActionPerformed(evt); 
        setVisible(false) ; 
      } 
    }); 


    this.getContentPane().add(pnlSettingsData, null);    
    setDefaultCloseOperation(HIDE_ON_CLOSE); 
    setLocation(150,200); 
    //pack(); 
    setVisible(true); 
} 


private void doneActionPerformed(ActionEvent evt) { 

    // include here the data base updates  
} 

public void actionPerformed(ActionEvent e) { 
} 

}

+3

退房还[使用多个JFrames,好/坏实践?](http://stackoverflow.com/a/9554657/928711)。考虑使用模态JDialog(而不是合适的所有者)。 – 2013-03-08 22:48:27

+0

@GuillaumePolet +1这就是我正在建议的:) – 2013-03-08 22:49:25

+0

在你的例子中,第二帧不会阻止第一帧,这是JDialog的作用,请参阅[如何使用对话框](http:// docs。 oracle.com/javase/tutorial/uiswing/components/dialog.html)获取更多详细信息 – MadProgrammer 2013-03-08 22:50:03

回答

2

你可以...

  1. 使用模态JDialog从用户收集信息,当它关闭时,您将能够从当前帧重新加载文件。
  2. 允许注册一个动作的第一帧听第二帧,它调用时(大概是当用户点击接受按钮),那么你会重新加载该文件,并更新UI
+0

感谢您的回答,想出了要做什么,以及轻微的重新设计以删除多个框架并使用JDialog – 2013-03-11 11:40:40