2013-03-08 69 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