2014-10-28 40 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

虽然有办法做到这一点,但我想指出,这不是一个好的设计!不要一概而论!我认为你需要尝试重新设计你的代码。如果你的一个课程发生了变化,那么你最终会破坏它们。为每种表单类型创建一个处理程序。你可以使用工厂模式来做到这一点,然后根据它得到适当的表单。可能会有更多的工作,但你会后来感谢我:)

如果你需要设计方面的帮助,那么这是我们可以肯定讨论的东西。