2016-08-04 1 views
3

이것은 기능 관련 질문보다는 프로그래밍 스타일 관련 질문에 더 가깝습니다.매개 변수로 문자열 리터럴을 사용하지 않고 대화 상자의 모든 매개 변수 (예 : '대화 제목', '확인 텍스트'등)를 프로그래밍 방식으로 '설정'할 수 있습니까?

. 
. 
import com.codename1.ui.Display; 
import com.codename1.ui.Form; 
import com.codename1.ui.Dialog; 
import com.codename1.ui.Button; 
. 
. 
// Create a button 
Button myButton = new Button("Click Me"); 

// Create an action listener for the button 
myButton.addActionListener((e) -> Dialog.show("Dialog title", "Dialog text", "OK", null)); 
. 
. 
.  

Dialog.show() 명령은 내부 4 개 매개 변수가 있습니다 나는 CodenameOne 대화 상자를 만들기위한 참조

모든 예제는 다음과 같이 나타납니다. 그러나 가능하면, 내가 그들을 제거 할, 아래의 스타일에 따라,이를 '설정'

Dialog myDialog = new Dialog();  // Empty parameter list 
myDialog.setTitle("Dialog Title"); // 1st parameter 
myDialog.set??? // How can I 'set' "Dialog text" (2nd parameter) like I just did with Dialog Title? 
myDialog.set??? // How can I 'set' "OK" (3rd parameter) like I just did with Dialog Title? 
myDialog.set??? // How can I 'set' null (4th parameter) like I just did with Dialog Title? 

// ...and then just do something like ... 

myButton.addActionListener((e) -> myDialog.show()); // empty parameter list 

내가 같은에서 등 대화 텍스트, OK 버튼 텍스트를, '설정'어떻게 내가 사용할 수있는 방식으로 dialog.setTitle()? 각 다른 매개 변수에 해당하는 설정자가 있습니까?

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

+0

아마도 질문에 뭔가 빠졌지 만 Dialog.show의 하드 코딩 된 문자열을 String 변수로 바꿀 수는 없습니까? 버튼에 대해 ok 또는 취소 버튼을 사용하지 않으려면 변수가 null을 가리키는 지 확인하십시오. Dialog.show를 호출하기 전에 원하는대로 문자열을 수정하십시오. –

+0

답변 해 주셔서 감사합니다. 이 질문은 분명히하기 위해 편집되었습니다. 예, 제가 제안한 것을 할 수 있고 그것이 효과가 있습니다. 그러나 정확히 무엇이 요구되었는지는 아닙니다. 감사. – Dan

+0

하위 클래스를 추가하고 더 많은 정적 도우미 메서드를 추가하는 것은 어떻습니까? –

답변

2

처럼, 매개 변수의 목록를 사용해야합니다. 방법 show을 제외하고 official docs에서 검색 할 수 있으며 text, okText 또는 cancelText에 대한 다른 참조는 없습니다. 메서드의 오버로드에 대한 모든 매개 변수를 넣어야합니다 (show). 이것이 API 작성 방법입니다.

더 많은 세터를 얻으려면 추가 작업을 원한다면 @James H가 제안한 것처럼 할 수 있습니다. (왜 처음에는 그렇게 생각하지 않았는지 모르겠습니다) : 파생 클래스를 만듭니다. 난 꽤) text, okTextcancelText을 추가 할 수있는 파생 클래스 (OkCancelDialog)에서 show()의 매개 변수는 해당 필드가 없다고 확신 해요, 기본 생성자 및 매개 변수화 된 생성자를 만들고 getters/해당 필드에 대한 설정자와 해당 필드를 사용하는 show 메소드가 있습니다. 그런 다음 DialogOkCancelDialog으로 변경하면됩니다.

public class OkCancelDialog extends Dialog { 
    private String text=null, okText=null, cancelText=null; 

    public OkCancelDialog (String text, String okText, String cancelText){ 
     super(); 
     this.text = text; 
     this.okText = okText; 
     this.cancelText = cancelText; 
    } 

    public void setText (String text) { this.text = text; } 
    public void setOkText (String okText) { this.okText = okText; } 
    public void setCancelText (String cancelText) {this.cancelText = cancelText; } 

    public boolean show() { 
     return super.show (this.title, this.text, this.okText, this.cancelText); 
    }  
} 
+0

예, 정확하게. BTW, 나는 OP가 매개 변수를 전달하는 일반적인 대안이 있는지 묻고 있었다고 생각합니다. 예를 들어, PL/SQL 또는 VBA에서 "명명 된 인수"와 같습니다. –

+0

@George 나는 setter 또는 생성자가있는 Java 방식 인 "set"방법으로 myDialog.setTitle ("Dialog Title")'예제에 대한 나의 대답을 기반으로했습니다. OP가 "dialog.setTitle()"을 사용할 수있는 것과 같은 방식 대신 "SQL과 같은 방식으로"라고 말하면, 내 대답은 상황에 맞지 않을 것입니다 ... – OliPro007

+0

감사합니다 Olipro007 !! 이 설명과 코드 예제는 우수하고 정확하게 내가 찾고있는 것입니다. 특정 프로그래밍 작업을 해결하는 것보다 Java의 내부 동작에 대한 이해를 높이는데 도움이 될 것입니다. 아마도 필자는 Java 및 OOP 용어를 사용하여 내 질문 문구를 가장 잘 이해할 수 없었지만 그 점을 알게되었습니다. 훌륭한! – Dan

1

Dialog.show()과 같이 과 같은 기존의 의 기능 또는 방법은이 작업을 수행 할 수 없습니다.

다른 언어로도 만들 수있는 구조가 가능하지만 java의 일부가 아닙니다. 메소드 호출에 대한

참조 : http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.12

당신은 항상 setTitle()를 제외하고 show (String title, String text, String okText, String cancelText)에 사용되는 매개 변수에 대한 세터가 없습니다 (arg1, arg2, arg3)

+0

감사합니다. 이것은 CodenameOne 질문입니다. 같이하지 'com.codename1.ui.Dialog' 정확 :;' 'myDialog.setTitle ("대화 상자 제목")' '을 myButton '대화 MyDialog에 = 새로운 대화() 대화 상자에서 온다 .addActionListener ((e) -> myDialog.show()); ... 제목이있는 대화 상자를 생성합니다. – Dan

1

show 스윙에서 JOptionPane에 의해 부분적으로 영감을 정적 도우미 메서드입니다. Dialog의 핵심 기능은 Form/Container입니다.

예컨대 : Command를 사용하여 암시 적으로 Dialog을 처분하지만 dlgdispose()를 호출하는 리스너를 쓸 수

Dialog dlg = new Dialog("My Dialog"); 
dlg.setLayout(new BorderLayout()); 
dlg.add(BorderLayout.CENTER, new SpanLabel("This is the body of the dialog, I can add anything I want here...")); 
dlg.add(BorderLayout.SOUTH, new Button(new Command("OK")); 

알 수 있습니다.

Dialog의 본문으로 Container을 사용할 수있는 정적 show 변형 중 하나를 사용할 수도 있습니다.

+0

감사. 이 기술을 사용하여 내 문제를 해결하려고합니다. – Dan

관련 문제