2014-10-28 3 views
0

Im действительно не уверен, как сформулировать этот вопрос. Но я буду стараться изо всех сил. Потерпите меня, если бы вы могли :)Имя возвращаемого объекта с объектами

У меня есть база данных с 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); 
} 

Теперь .. это взял меня на некоторое время, чтобы понять, что я не могу вернуть такие значения, и вместо этого я мог вместо этого вернуть объект. У меня есть класс, созданный для каждой из этих «таблиц» (предмет, клиент и персонал). Но .. вещь в методе выше Мне нужно использовать переключатель, чтобы я мог иметь метки, сделанные в соответствии с типом таблицы.

Итак, мой вопрос в том, есть способ передать объект и его имя в метод? Или у меня все в порядке?

Любая помощь очень ценится.

+1

Это значит быть методом или это конструктор? –

+0

Метод. Конструктор был написан в другом месте. – Tsar

+0

Java не имеет «выходных» параметров. Поэтому, если вы намерены, чтобы вызывающий объект передавал переменные String, такие как val1, val2 и т. Д., И метод заполнит их значения, вы не сможете сделать это на Java так, как можете, на некоторых других языках (например, C++ или PHP или Ada). – ajb

ответ

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 вместо отдельных переменных, таких как val1Field, val2Field и т. Д., Так что вам не нужно повторять код, подобный этому.

+0

Как я объяснил выше .. У меня несколько таблиц .. Мне нужно вставить в них значения, чтобы сделать это, я сначала попробовал отдельно, используя joptionpane для вставки значений .. но это показалось слишком утомительным. Поэтому я хочу создать форму, и поскольку все таблицы имеют 5 полей, я думал об использовании одного метода для всех из них. Вот почему мне нужен «вариант», чтобы определить, какой из них (клиент, элемент или персонал), чтобы убедиться, что метки установлены. Если я задаю опцию в качестве аргумента, мне нужно также вернуть ее .. какие-то мысли по этому поводу? – Tsar

+0

@ShifaTsar Я не понимаю, зачем вам нужно возвращать 'option'. У вызывающего есть опция уже, для вычисления не требуется метод 'form'. Возможно, у вас есть некоторые основные недоразумения в отношении того, что означает ** вернуть ** что-то. Как правило, вы пишете метод, который _returns_ значение, когда цель метода заключается в том, чтобы вычислить что-либо или получить некоторые данные, и вернуть результат вызывающему. Ваше описание делает его похожим на то, что 'form' должен быть объектом (класса), а не методом. – ajb

+0

спасибо за консультацию по поводу опции. Я прочитал документацию и мне удалось вернуть объект, и это сработало :) – Tsar

0

Хотя есть способ сделать это, я хотел бы указать, что это не очень хороший дизайн! Не обобщайте методы! Я думаю, что вам нужно попробовать переделать код вместо этого. Если один из ваших классов изменится, вы все равно сломаете их. Создайте обработчик для каждого типа формы. Вы можете сделать это, используя шаблон Factory, а затем получить соответствующую форму на основе этого. Может быть, немного больше работы, но вы поблагодарите меня позже :)

Если вам нужна помощь по дизайну, то это то, что мы можем определенно обсудить.