2012-10-18 61 views
0

我想將類型爲List的變量值(變量名是seznamRacunov)從一個類傳遞到另一個類。Java - 從一個類到另一個類的變量值

1類

public class UvoziRacun 
{ 
    private String potRacuna; 
    private List<String> seznamRacunov = new ArrayList(); 

    public void setRacun(List<String> seznamRacunov) 
    { 
     this.seznamRacunov = seznamRacunov; 
    } 

    public List<String> getRacun() 
    { 
     return seznamRacunov; 
    } 

    public String getPotRacuna() 
    { 
     return potRacuna; 
    } 

    public void showDailog() 
    { 
     try 
     { 
     JFileChooser racun = new JFileChooser(); 
     racun.setCurrentDirectory(new File("")); 

     racun.setFileFilter(new javax.swing.filechooser.FileFilter() 
     { 
      public boolean accept(File f) 
      { 
       return f.getName().toLowerCase().endsWith(".xml") || f.isDirectory(); 
      } 
      public String getDescription() 
      { 
       return "XML Datoteka"; 
      } 
     }); 

     //racun.setMultiSelectionEnabled(true); 
     int r = racun.showOpenDialog(new JFrame()); 

     if (r == JFileChooser.APPROVE_OPTION) 
     { 
      potRacuna = racun.getSelectedFile().getPath(); 
      seznamRacunov.add(potRacuna); //value is stored 
     } 
     //System.out.print("Racuni: " + seznamRacunov); 
     } 
     catch(Exception ex){} 
    } 
} 

2類

public class PrikaziRacune extends javax.swing.JFrame 
{ 
    UvoziRacun rac = new UvoziRacun(); 

    public PrikaziRacune() 
    { 
     initComponents(); 

     try 
     { 
      System.out.print(rac.getRacun()); // value is null, why? 
      //jLabel2.setText(); 
     } 
     catch(Exception ex){} 
} 

方法seznamRacunov.add(potRacuna);存儲在1級的值成seznamRacunov,但是列表的值不會2類通過其中I稱爲吸氣劑。哪裏不對?

+0

你想要的值或引用? – Hidde

+0

我想要存儲在第一個類中的列表的值。 – Strausa

回答

1

方法seznamRacunov.add(potRacuna);將值存儲到類1中的seznamRacunov 中,但列表的值不通過類2,其中I 稱爲getter。

那是因爲,你想你的get()List甚至調用method - showDailog()這反過來又調用您的add()方法來填充列表。

  • 確保,調用此方法 - showDailog()來填充列表,實際上是取Listget方法

  • 之前或者,它會更好,如果你添加一個constructor到類,它的任務是你的List。然後你可以使用constructor創建一個實例,因此你不會有任何問題。

PS: - 你應該始終有至少一個0-arg constructor來初始化你的領域,而不是letting編譯器處理這個任務給你。

還有一件事,你永遠不應該通過擁有empty catch塊來吸引你的例外。否則捕捉它們沒有意義。改爲添加printStackTrace()

public PrikaziRacune() { 
    initComponents(); 

    try 
    { 
     rac.showDailog(); // Will populate the list 
     System.out.print(rac.getRacun()); // You can get the value here. 
     //jLabel2.setText(); 
    } 
    catch(Exception ex) { 
     ex.printStackTrace(); 
    } 
} 
  • 另外,檢查你ArrayList聲明在你的第一類。您在LHS上使用generic type List,在RHS上使用Raw type ArrayList。它應該避免的東西。

對雙方Generic類型: -

private List<String> seznamRacunov = new ArrayList<String>(); 
+0

謝謝你的建議,我會盡量先解決。在第二種解決方案中,我不想再次顯示對話框,因此這不是一個好主意。 – Strausa

+1

@Strausa然後你需要定義一個構造函數來初始化你的List。因爲你只在'showDailog'方法中初始化它。 –

相關問題