2017-12-21 58 views
0

: 나는 동일한 기능을 찾을 수 없어Java SWING의 JFrames에서 WindowsForms의 DialogResult 속성에 해당하는 항목은 무엇입니까? 나는 자바 스윙 라이브러리를 사용하여 자바 응용 프로그램을 쓰고 있어요 및 WindowsForms를 사용하여 C에서 # 코드 줄에 동등한 기능을 찾고

MyDialog form = new MyDialog(); 
form.showDialog(); 

if (form.DialogResult == DialogResult.OK) 
     doSomething(); 

Java의 JFrames. 코드 발사

LoginFrame loginFrame = new LoginFrame(CONTROLLER); 
loginFrame.setVisible(true); 

이전 2 줄 로그 - 인 창 위치를 사용자가 입력 자신의 이메일과 비밀번호를 할 수 있습니다

내가 일하고 있어요 코드는 다음과 같다. 이 창에는 OK와 CANCEL 두 버튼이 표시됩니다. 창을 닫은 후 사용자가 누른 두 개의 단추 중 하나를 알고 싶습니다.

JFrames로 Java Swing에서 이것을 수행하는 표준 방법은 무엇입니까?

+1

아마'JOptionPane.showConfirmDialog (..);'. –

+0

내 초기 결론은 틀린 대화 상자에 대한 JFrame 객체를 선택했다는 것입니다. 확인할 수 있습니까? 대신 JDialogs를 사용해야합니까? 감사! – ismarlowe

+1

* "대신 JDialogs를 사용해야합니까?"* 물론이 경우에는 모달'JDialog' 또는 JOptionPane (기본적으로 모달)입니다. 'JOptionPane'을 이용한 로그인 예제를 보려면 [이 답변] (https://stackoverflow.com/a/47644458/418556)을보십시오. [다중 JFrames의 사용, 좋고 나쁜 관행?] (http://stackoverflow.com/q/9554636/418556) (일반적으로 메인 애플리케이션 만 'JFrame'을 기반으로해야합니다.) –

답변

0

버튼에 ActionListener을 설정할 수 있습니다. 여러 가지가 있습니다.

익명 액션 리스너 (유지 보수 문제에 대한 최선의 선택)

class CheckButtonActionListener implements ActionListener{ 

    @Override 
    public void actionPerformed(ActionEvent actionEvent) { 
     if(e.getSource() == button1) { 
      //if clicks the first button 
     } else if (e.getSource() == button2) { 
      //if clicks the second button 
     } 
    } 

} 

액션 리스너를 구현하고, 당신의 JButton에 클래스를 설정

button1.addActionListener(new ActionListener() { 

    @Override 
    public void actionPerformed(ActionEvent actionEvent) { 
     if(e.getSource() == button1) { 
      //if clicks the first button 
     } else if (e.getSource() == button2) { 
      //if clicks the second button 
     } 
    } 
}); 

등급 :

CheckButtonActionListener checker = new CheckButtonActionListener(); 
button.addActionListener(checker); 

또는 :

button1.addActionListener(new CheckButtonActionListener(); 
1

응용 프로그램에는 기본 창으로 단일 JFrame이 있습니다.

자식 창이 필요하면 JDialog를 사용하십시오. JDialog는 JFrame과 같습니다. 모든 로직을 직접 코딩하고 모든 버튼 이벤트를 직접 처리해야합니다.

JOptionPane은 기본 기능을 제공하는 사전 패키지 된 JDialog입니다. 위의와

JTextField firstName = new JTextField(10); 
//firstName.addAncestorListener(new RequestFocusListener()); 
JTextField lastName = new JTextField(10); 
Object[] msg = {"First Name:", firstName, "Last Name:", lastName}; 

result = JOptionPane.showConfirmDialog(
    frame, 
    msg, 
    "Enter Name", 
    JOptionPane.OK_CANCEL_OPTION, 
    JOptionPane.PLAIN_MESSAGE); 

if (result == JOptionPane.YES_OPTION) 
{ 
    System.out.println(firstName.getText() + " : " + lastName.getText()); 
} 
else 
{ 
    System.out.println("Canceled"); 
} 

하나의 문제는 그 초점이 버튼이 아닌 텍스트 필드에있을 것입니다 :

당신은 같은 코드 뭔가 여러 입력 필드와 간단한위한 JOptionPane를 생성 할 수 있습니다. Request Focus Listener

옵션 창에서 구성 요소의 레이아웃이 마음에 들지 않으면 구성 요소로 사용자 지정 패널을 만들고 옵션 창에 패널을 추가해야합니다.

Making Dialogs에서 스윙 튜토리얼의 섹션을 확인해야합니다. 이 섹션과 튜토리얼은 일반적으로 C#에서 전환으로 스윙 기본 사항을 제공합니다.