2014-04-06 35 views
1

NetBeans Project and Source Code of a minimal example有沒有更好的方法來連接兩個JPanel?

是否有更好的方法來從不是使JPanel公共領域之外的其它類JPanel連接JFrame

我正在編寫一個程序,其中會有一個選項按鈕,當按下該按鈕時,會自定義一個JOptionPane.showOptionDialog,其中包含一個JPanel,其中將包含用戶需要的特定選項。

當用戶按下JOptionPane.OK_OPTION按鈕時,程序關閉OptionDialog,其中的JPanel返回到JFrame。然後我需要在JFrame課程中使用的JPanel中輸入的內容。我只是通過將JPanel的文本字段公開,但我覺得這是一種便宜的方法,特別是因爲NetBeans不會讓我這樣做,除非我在記事本中打開源代碼。我

也將與如果JOptionPane.OK_OPTION只是保存Jpanel領域在文件完全OK,然後我可以分別在JFrame類檢索。

那麼有沒有更好的方法來做到這一點?

JFrame的動作監聽:

private void goSettingsActionPerformed(java.awt.event.ActionEvent evt) {           
     Settings settings = new Settings(); 
     int result = JOptionPane.showOptionDialog(null, 
       settings, 
       "Settings", 
       JOptionPane.OK_CANCEL_OPTION, 
       JOptionPane.INFORMATION_MESSAGE, 
       null, 
       new String[]{"Save", "Cancel"}, 
       "default"); 
     if (result == JOptionPane.OK_OPTION) { 
      username = settings.jTextField1.getText(); 
      usernameInputedLabel.setText(username); 
     } 
    } 

回答

1

你的問題是一個普遍的問題的一個具體的例子:你是怎麼兩個對象溝通?

  • 您認爲使用公共領域的考慮是錯誤的。
  • 您提到將數據保存到文件中,但不是過度殺死,當更簡單的解決方案可用時,這不會增加不必要的時間和資源開銷嗎?
  • 如果不是Swing GUI,最好使用與你使用的技術相同的方法:公共方法(如果需要的話,包括getter和setter方法)。

例如,

private void goSettingsActionPerformed(java.awt.event.ActionEvent evt) {           
    Settings settings = new Settings(); 
    int result = JOptionPane.showOptionDialog(null, 
      settings, 
      "Settings", 
      JOptionPane.OK_CANCEL_OPTION, 
      JOptionPane.INFORMATION_MESSAGE, 
      null, 
      new String[]{"Save", "Cancel"}, 
      "default"); 
    if (result == JOptionPane.OK_OPTION) { 

     // **** give your Settings class this method: 
     username = settings.getUserName(); 
     usernameInputedLabel.setText(username); 
    } 
} 

編輯
幽州的評論:

我會用getter和setter方法,但是從我讀過的書和我經常參加的論壇,我知道普遍的共識是,讓吸氣人員和安裝人員更糟糕公共領域。

對不起,但這是hogwash。請考慮你的代碼與我的代碼。在上面我的代碼,我建議givng設置的方法,像這樣:

// in declarations: 
// don't name this jTextField1 
private JTextField userNameField = new JTextField(); 

// public getter method 
public String getUserName() { 
    return jTextField1.getText(); // this should be named userNameField 
} 

鑑於您的建議是讓JTextField的市民,它充分暴露來者不拒。哪個更危險?這可能允許調用代碼在您不知情的情況下更改Settings對象的狀態?

+0

我會使用getter和setter,但是從我讀過的書以及我經常看到的論壇中,我知道普遍的共識是getter和setter比公有領域更糟糕。 –

+0

@SilliconTouch:請在上面的陳述中給我一個體面的參考。你基本上認爲最好是完全暴露字段,而不是使用有限和受控的必要數據暴露,這是不正確的,完全不是。 –

+0

@SilliconTouch:另外,如果您有一個最簡單的例子,請將其作爲所有人都可以看到的代碼發佈,而不是作爲將來可能陳舊或者在被訪問時存在風險的鏈接。 –

相關問題