我真的不确定如何说出这个问题。但我会在这里尽我所能。如果可以的话,请耐心等待:)。
我有一个包含3个表的数据库(我现在正在处理)。幸运的是,它们都具有相同数量的列。我试图使用“弹出”形式将值输入到它们中。 (不知道怎么做,但我使用this link here作为指导,并希望它有效)
这是我到目前为止为该方法编写的代码..
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);
}
现在..我花了一段时间意识到我不能返回这样的值,而我可以改为返回对象。我为每个“表”(项目,客户和员工)制作了一个课程。 但..事情是在上面的方法我需要使用一个开关,以便我可以根据表的类型制作标签。
所以我的问题是,有没有办法将对象及其名称传递给方法?或者我错了吗?
非常感谢任何帮助。
答案 0 :(得分: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;
}
P.S。我建议使用数组或ArrayList
而不是val1Field
,val2Field
等单独的变量,这样您就不必像这样重复代码了。
答案 1 :(得分:0)
虽然有办法做到这一点,但我想指出这不是一个好的设计!不要概括方法!我认为您需要尝试重新设计代码。如果你的某个班级发生了变化,你最终还是会分手。为每种表单类型创建一个处理程序。您可以使用Factory模式执行此操作,然后根据该模式获取相应的表单。可能会多一点工作,但你会在以后感谢我:)
如果您需要设计方面的帮助,那么我们肯定可以讨论这个问题。