2014-10-28 2 views
0

Im이 질문의 단어를 쓰는 방법은 확실하지 않습니다. 하지만 여기서 최선을 다할거야. 당신이 수 있다면 나와 함께 곰 :객체 값을 가진 객체 이름을 반환하는 중

나는 (지금 다루고있는) 3 테이블 데이터베이스가 있습니다. 다행히도 모두 같은 양의 컬럼을가집니다. "팝업"양식을 사용하여 값을 입력하려고합니다. .. 그것을 지금 ... 여기

내가 지금까지 그 방법에 대해 작성한 코드입니다

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); 
} 

을 (그렇게하는 방법을 잘하지만, 메신저 가이드 라인으로 this link here을 사용하고 기대하지 그것은 작동) 나는 값을 돌려 줄 수 없다는 것을 깨닫기 위해 잠시 시간을 들였고 대신 객체를 대신 반환 할 수있었습니다. 나는이 "테이블"(품목, 고객 및 직원) 각각을 위해 수업을 만들었습니다. 하지만 .. 위의 방법에있는 것은 테이블의 유형에 따라 레이블을 만들 수 있도록 스위치를 사용해야합니다.

내 질문은 메서드에 개체와 해당 이름을 전달할 수있는 방법이 있습니까? 아니면 내가 잘못 했니?

도움을 주시면 감사하겠습니다.

+1

이것은 메소드를 의미합니까, 아니면 생성자입니까? –

+0

방법. 생성자는 다른 곳에서 썼다. – Tsar

+0

Java에 "output"매개 변수가 없습니다. 그래서 만약 호출자가'val1','val2'와 같은'String' 변수를 전달할 것이라는 의도로 메소드가 값을 채우게된다면, 당신은 다른 언어로 할 수있는 것처럼 자바로 할 수 없습니다 (C++ 또는 PHP 또는 Ada와 같은). – ajb

답변

0

결코 변경하지 않으므로 option을 반환 할 필요가없는 것처럼 보입니다. 또한 호출자가 메소드에 변수를 전달하도록하고 메소드가 해당 변수의 값을 채우는 것처럼 보입니다. 그러나 Java는 C++ 및 PHP와 같은 방식으로 "출력"또는 "참조"매개 변수를 갖지 않으므로 작동하지 않습니다. (변경 가능한 객체에 대한 참조를 전달하고 해당 객체에서 필드를 설정하는 방법을 사용하지만 String으로 변경할 수는 없습니다.

그럴 경우 5 가지

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 : 당신이 돌아 모두 같은 유형하려면, 당신은 당신의 방법은 String[] 반환 할 수있다 val1Field, val2Field 등과 같은 별도의 변수 대신 배열 또는 ArrayList을 사용하는 것이 좋습니다. 이렇게하면 코드를 반복하지 않아도됩니다.

+0

내가 위에서 설명했듯이 .. 나는 여러 개의 테이블을 가지고있다. 나는 값을 삽입하기 위해 joptionpane을 사용하여 처음에 개별적으로 시도하기 위해 값을 삽입해야한다. 그러나 그것은 너무 지루한 것처럼 보였다. 그래서 양식을 만들고 싶습니다. 그리고 모든 테이블에는 5 개의 필드가 있기 때문에 모든 필드에 하나의 메서드를 사용하려고 생각했습니다. 그게 내가 라벨이 적절하게 설정되었는지 확인하기 위해 (고객, 항목 또는 직원) 어느 하나인지 식별하는 "옵션"이 필요한 이유입니다. 인수로 옵션을 설정하면, 그것을 반환해야합니다 .. 그것에 대한 생각? – Tsar

+0

@ShifaTsar 왜'option'을 반환해야하는지 이해가 안됩니다. 호출자는 이미 옵션을 가지고 있으며, 그것을 계산하기 위해'form' 메소드가 필요하지 않습니다. ** 무엇을 ** 반환하는 것이 의미하는지에 대한 기본적인 오해가있을 수 있습니다. 일반적으로 메서드의 목적이 무언가를 계산하거나 데이터를 검색하고 결과를 호출자에게 돌려 줄 때 메서드는 값을 반환하는 메서드를 작성합니다. 설명은 '폼'이 메소드가 아닌 객체 (클래스)이어야하는 것처럼 보입니다. – ajb

+0

옵션 부품에 대한 조언을 주셔서 감사합니다. 나는 설명서를 읽고 객체를 반환하고 그것을 관리했습니다 :) – Tsar

0

이 작업을 수행하는 방법이 있지만 좋은 디자인이 아닙니다. 메소드를 일반화하지 마십시오! 대신 코드를 재 설계해야 할 필요가 있다고 생각합니다. 수업 중 하나가 변경되면 어쨌든 수업이 종료됩니다. 각 양식 유형에 대한 처리기를 만듭니다. 팩토리 패턴을 사용하여이 작업을 수행 한 다음이를 기반으로 적절한 양식을 얻을 수 있습니다. 조금 더 일할 수도 있겠지만, 나중에 고마워 할 것입니다. :)

디자인에 대한 도움이 필요하시면, 우리가 확실히 의논 할 수있는 부분입니다.

관련 문제