2014-10-28 92 views
0

我真的不確定如何說出這個問題。但我要在這裏盡我所能。忍受我,如果你可以:)使用對象值返回對象名稱

我有一個數據庫3表(我現在正在處理)。幸運的是,它們都有相同數量的列。我試圖用一個「彈出」的形式輸入值。 (不知道如何做到這一點,但使用this link here IM作爲指導方針,並希望它的工作原理)

這裏是我迄今該方法編寫的代碼..

public form(int option, String val1, String val2, String val3, String val4, String val5) 
{ 
    val1 = null; 
    val2 = null; 
    val3 = null; 
    val4 = null; 
    val5 = null; 

    JTextField val1Field = new JTextField(20); 
    JTextField val2Field = new JTextField(20); 
    JTextField val3Field = new JTextField(20); 
    JTextField val4Field = new JTextField(20); 
    JTextField val5Field = new JTextField(20); 

    String name; 
    String lbl1 = null; 
    String lbl2 = null; 
    String lbl3 = null; 
    String lbl4 = null; 
    String lbl5 = null; 

    switch(option) 
    { 
    case 1: //if customer 
     name = "Customer Information"; 
     lbl1 = "Customer No:"; 
     lbl2 = "Customer Name:"; 
     lbl3 = "Company Name:"; 
     lbl4 = "Contact Number: "; 
     lbl5 = "Discount Rate:"; 

    case 2: //if item 
     name = "Item Information"; 
     lbl1 = "Item No:"; 
     lbl2 = "Item Name:"; 
     lbl3 = "Cost Price:"; 
     lbl4 = "Selling Price: "; 
     lbl5 = "Stock:"; 

    case 3: //if user 
     name = "Staff Information"; 
     lbl1 = "Staff ID:"; 
     lbl2 = "Full Name:"; 
     lbl3 = "Username:"; 
     lbl4 = "Password: "; 
     lbl5 = "adminusercheck:"; 

    default: 
     JOptionPane.showMessageDialog(alphaPOS, 
       "Something went wrong! Try again!", 
       "ERROR", 
       JOptionPane.ERROR_MESSAGE); 

    } 

    JPanel formPanel = new JPanel(); 

    formPanel.add(new JLabel(lbl1)); 
    formPanel.add(val1Field); 
    formPanel.add(Box.createHorizontalStrut(15)); // a spacer 
    formPanel.add(new JLabel(lbl2)); 
    formPanel.add(val2Field); 
    formPanel.add(Box.createHorizontalStrut(15)); // a spacer 
    formPanel.add(new JLabel(lbl3)); 
    formPanel.add(val3Field); 
    formPanel.add(Box.createHorizontalStrut(15)); // a spacer 
    formPanel.add(new JLabel(lbl4)); 
    formPanel.add(val4Field); 
    formPanel.add(Box.createHorizontalStrut(15)); // a spacer 
    formPanel.add(new JLabel(lbl5)); 
    formPanel.add(val5Field); 
    formPanel.add(Box.createHorizontalStrut(15)); // a spacer 

    int result = JOptionPane.showConfirmDialog(null, formPanel, 
      name, JOptionPane.OK_CANCEL_OPTION); 

    if (result == JOptionPane.OK_OPTION) 
    { 
     val1 = val1Field.getText(); 
     val2 = val2Field.getText(); 
     val3 = val3Field.getText(); 
     val4 = val4Field.getText(); 
     val5 = val5Field.getText(); 

    } 

    return(option, val1, val2, val3, val4, val5); 
} 

現在..它花了我一段時間才意識到我不能返回這樣的值,而是我可以改爲返回對象。我爲每個這些「表」(項目,客戶和員工)制定了一個課程。 但是..事情是在上面的方法中,我需要使用開關,以便我可以根據表的類型製作標籤。

所以我的問題是,有沒有辦法將對象及其名稱傳入方法?或者我有這一切錯誤?

任何幫助,非常感謝。

+1

這是爲了成爲一種方法還是構造函數? – 2014-10-28 15:55:02

+0

方法。構造函數是在別處寫的。 – Tsar 2014-10-28 15:57:25

+0

Java沒有「輸出」參數。所以如果你的意圖是調用者會傳遞類似'val1','val2'等字符串變量,並且該方法將填充它們的值,那麼你不能用Java在其他語言中這樣做(如C++或PHP或Ada)。 – ajb 2014-10-28 15:58:55

回答

0

在我看來,你並不需要返回option,因爲你永遠不會改變它。此外,它看起來像你試圖讓調用者傳遞變量到方法中並讓方法填入這些變量的值。但是Java沒有像C++和PHP那樣使用「輸出」或「參考」參數,所以這不起作用。 (您可以通過在一個可變對象的引用,並有一個方法在對象中設置一個字段,但你不能做到這一點與String,因爲它是不可變的。)

如果是這樣的話,那麼自5件事要返回都是同一類型的,你可以只讓你的方法返回一個String[]

public String[] form(int option) 
{ 
    String[] values = new String[] (5); 
    //values[0] = null; // not necessary since the array elements will already be null 
    //values[1] = null; ... 

    ... 


    if (result == JOptionPane.OK_OPTION) 
    { 
     values[0] = val1Field.getText(); 
     values[1] = val2Field.getText(); 
     values[2] = val3Field.getText(); 
     values[3] = val4Field.getText(); 
     values[4] = val5Field.getText(); 

    } 

    return values; 
} 

PS我推薦使用數組或ArrayList而不是像val1Fieldval2Field等單獨的變量,這樣就不必重複這樣的代碼。

+0

正如我在上面解釋..我有多個表..我需要插入值,爲此,我第一次嘗試使用joptionpane分別插入值..但這似乎太乏味。所以我想製作一個表格,並且由於所有的表格都有5個字段,所以我想爲它們使用一種方法。這就是爲什麼我需要一個「選項」來確定它是哪一個(客戶,物品或員工)以確保相應地設置標籤。如果我將選項設置爲參數,我需要將其返回以及..對此有什麼想法? – Tsar 2014-10-28 16:24:48

+0

@ShifaTsar我不明白你爲什麼需要返回'選項'。調用者已經有了這個選項,它不需要'form'方法來計算它。你可能會有一些基本的誤解,認爲**返回**意味着什麼。一般來說,當方法的目的是計算某些東西或檢索某些數據並將結果返回給調用者時,您會編寫一個_returns_值。你的描述使得它看起來像一個'form'應該是一個對象(類),而不是一個方法。 – ajb 2014-10-28 16:29:45

+0

感謝您的選擇部分建議。我閱讀了文檔,並設法返回對象,它的工作:) – Tsar 2014-10-29 10:05:56

0

雖然有辦法做到這一點,但我想指出,這不是一個好的設計!不要一概而論!我認爲你需要嘗試重新設計你的代碼。如果你的一個課程發生了變化,那麼你最終會破壞它們。爲每種表單類型創建一個處理程序。你可以使用工廠模式來做到這一點,然後根據它得到適當的表單。可能會有更多的工作,但你會後來感謝我:)

如果你需要設計方面的幫助,那麼這是我們可以肯定討論的東西。