2012-12-20 4 views
0

JDialog를 사용하여 사용자로부터 입력을받은 다음 찾아보기 대화 상자가 아닌 파일을 검색하는 애플리케이션이 있지만 메타 데이터를 사용하는보다 전문화 된 애플리케이션이 있습니다.대화 상자를 닫지 않고 값을 가져 옵니까?

이 모든 것이 정상적으로 작동합니다. 유일한 문제는 사용자가 검색 값을 입력하고 확인을 누른 다음 대화 상자를 닫지 않고 검색 및 일부 다른 작업 (대화 상자를 연 호출 클래스에서)을 받기 위해 이러한 값을받을 수있게하려는 것입니다.

호출 클래스에서 이러한 작업을 수행해야합니다. 이는 편집자의 플러그인에 포함되어 있기 때문입니다.

기본적으로, 짧은에이 종류의 어떤 편집기에서 대화 작품을 찾기 방법처럼 - 당신이 다음에 하나 개 발견 항목 ...에서 건너 뛸 동안 찾기 대화 상자가 열려 난 같은

보인다 간단한 것을 놓치기는했지만이 방법을 알 수는 없습니다.

편집 :

내가 닉 Rippe에 의해 제안 된 튜토리얼에 따라 간단한 테스트 응용 프로그램에서 이것을 시도,하지만 난 그것을 작동시킬 수 없기 때문에 내가 어떻게 든 오해 것 같아요. 나는 getter와 setter와 필드를 추가하고 그것을 얻으려고 :

Main 클래스 : 폼 클래스에서

public class TestJFrames { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     TestForm frame = new TestForm(); 
     frame.setDefaultCloseOperation(frame.DO_NOTHING_ON_CLOSE); 
     frame.addPropertyChangeListener("fileSelected", new FileSelectedListener()); 
     frame.setVisible(true); 
    } 
} 

class FileSelectedListener implements PropertyChangeListener { 

    @Override 
    public void propertyChange(PropertyChangeEvent evt) { 
     System.out.println("TEST"); 
    } 
} 

:

private String fileSelected; 
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
     this.setFileSelected("Test"); 
    } 

    public String getFileSelected() { 
     return fileSelected; 
    } 

    public void setFileSelected(String fileSelected) { 
     this.fileSelected = fileSelected; 
    } 

내가 다른 해결책을 찾기까지했다. 비슷한 어려움을 가진 다른 사람을 도울 수 있다면 여기에 게시하십시오. 대화 클래스에 리스너로 등록하여 호출하는 클래스의 버튼 이벤트를들을 수 있습니다. 나는이 예제를 거의 따라 갔다 : Create a custom event in Java

+0

:

편집

여기에 약간의 튜토리얼 덤비는에서 예입니다. 거기에 어떤 코드가 있습니까? –

+1

@AndrewThompson : 대화 상자를 닫음으로써 호출 클래스에 제어권 만 반환 할 수 있기 때문에 문제가 발생했습니다. 나는 당신이 종종 "SSCCE"를 사용하도록 제안하는 것을 알아 챘다. 나는 이것이 많은 경우에 좋은 생각이지만, 많은 경우에 어디서부터 시작해야할지 이해하지 못하는 경우가 많으므로 그렇게하기가 어렵습니다. – Anders

+0

* "어디서부터 시작 해야할지 모르겠다. 대화를 닫음으로써 호출 클래스로 제어권을 되돌릴 수있다."* SSCCE를 게시하면 1) 어디서 왔는지 알 수 있습니다. 2) (우리가 원한다면) 템플릿은 누락 된 비트를 채워 질문에 답합니다. 모든 SSCCE가 해결하려고하는 문제를 성취하기 위해 진지한 시도를해야하는 것은 아니지만 그렇게한다면 더 좋습니다. –

답변

5

자바 튜토리얼은 section specifically devoted to this이다. 나는 그것을 체크 아웃하는 것이 좋습니다.

섹션을 Getting User Input 섹션과 결합하면 원하는 결과를 얻을 수 있습니다. 그것은 모두가 좋아하는 JButton의 행동이나 된 ActionListener의 코드에 따라

import java.awt.event.*; 
import javax.swing.*; 

public class Temp extends Box{ 
    JFrame frame; 
    JTextArea text; 

    public Temp(JFrame frame){ 
     super(BoxLayout.Y_AXIS); 
     this.frame = frame; 
     text = new JTextArea("Clickity Clack, down't the track.\nspam"); 
     add(text); 
     JButton button = new JButton("Click Me"); 
     button.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       launchDialog(); 
      } 
     }); 
     add(button); 
    } 

    public void launchDialog(){ 
     //What you want the find button to do 
     JButton findButton = new JButton("Find"); 
     findButton.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       int start = text.getText().indexOf("spam"); 
       int end = start + "spam".length(); 
       if(start != -1){ 
        text.requestFocus(); 
        text.select(start, end); 
       } 
      } 
     }); 

     //Cancel button hides the dialog 
     JButton cancelButton = new JButton("Cancel");  

     // Create the options displayed in the dialog 
     final JOptionPane optionPane = new JOptionPane(
       "Find \"spam\"?\n" 
       + "Do you understand?", 
       JOptionPane.QUESTION_MESSAGE, 
       JOptionPane.YES_NO_OPTION, null, new Object[]{findButton, cancelButton}); 

     // Build the dialog window 
     final JDialog dialog = new JDialog(frame, 
            "Click a button", 
            false); 

     //Add action to close button 
     cancelButton.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       dialog.setVisible(false); 
      } 
     }); 

     //Finish up and make it visible 
     dialog.setContentPane(optionPane); 
     dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); 
     dialog.setLocation(100, 100); 
     dialog.pack(); 
     dialog.setVisible(true); 

    } 


    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable(){ 

      @Override 
      public void run() { 
       JFrame frame = new JFrame(); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setContentPane(new Temp(frame)); 
       frame.pack(); 
       frame.setVisible(true); 
      }}); 
    } 

} 
+2

+1 자습서 인용. 여기에 관련 예제가 있습니다 (여기 [http://stackoverflow.com/a/12451673/230513]). – trashgod

+0

팁 주셔서 감사합니다, 그것은 유망 해 보이지만 작동시키지 못합니다. 내 업데이트를 참조하십시오! – Anders

+0

@AndersSvensson이 (가) 예를 들어 업데이트되었습니다. –

관련 문제