2014-01-13 2 views
-1

작은 텍스트 편집기를 코딩하려고하는데 GUI를 작성하려고합니다.ActionListeners의 FileChooser

JMenu을 추가하고 JMenuItem을 추가했습니다. 나는 메뉴 아이템에 "open"값을 주었다.

public void mousePressed(MouseEvent me) { 
    JFileChooser fs = new JFileChooser(); 
} 

이 방법은 MouseListener를 구현하는 클래스라는 리스너에 있습니다 내가 누를 때 "열기"는 JFileChooser 화면 여기

에 나타나는 것을 원하기 때문에 그 이유는 내가 가지고있는 것입니다. 이것은 내가 붙어있는 단계입니다.

getContentPane() 

..does이 작동하지 :

가 좋은 코드 연습 나는이 접근하고있어 방법이 있나요? 더 좋은 방법이 있습니까? 어떻게하지 않으면이 일을 어떻게해야합니까?

+0

MouseListener를 구현하는 경우 ActionListener가 아닙니다.또한 "작동하지 않음"을 정의하십시오. – Sinkingpoint

+1

향후 질문을위한 힌트. [MCVE] (http://stackoverflow.com/help/mcve)를 함께 사용하면 다른 사람들이 당신을 도울 수 있습니다. –

답변

2

일반적으로 당신의 접근 방식은 수도, 일할 수 있지만 Actions의 스윙 개념을 살펴보고 싶습니다. JMenuItem은 액션을 직접 지원하므로, MouseListener는 필요하지 않습니다.

예제를 보면 처음에는 다소 압도적으로 보일 수도 있지만 결국에는 원하는대로 멋지고 깨끗하게 캡슐화됩니다. 재사용이 가능하기 때문에 다른 메뉴 (상황에 맞는 메뉴 일 수도 있음)에서 작업을 사용할 수 있습니다.

그리고 코드에서 fs.showOpenDialog(component)에 대한 전화가 누락되었습니다.

+0

감사합니다. 나는 가서 행동을 들여다 보았다. 그들 중 하나의 특징은 내가 날씨를 확인하지 못한다는 것입니다. 제가 모니터하고 싶거나 하나만 만들고, 다른 사람이 어떤 행동을 취했는지 확인하고 싶은 모든 행동에 대해 행동을 만들어야합니다. – Bula

+0

각 기능에 대해 하나의 액션! 그게 전부 요점입니다 :) –

0

JFileChooser 클래스의 Javadoc을 살펴보십시오. 그것은 그것을 여는 방법의 예가 있습니다.

다음 코드는 .JPG 및 gif 이미지 사용자의 홈 디렉토리에 대한 파일 선택 팝업 : 첫째

JFileChooser chooser = new JFileChooser(); 
FileNameExtensionFilter filter = new FileNameExtensionFilter(
    "JPG & GIF Images", "jpg", "gif"); 
chooser.setFileFilter(filter); 
int returnVal = chooser.showOpenDialog(parent); 
if(returnVal == JFileChooser.APPROVE_OPTION) { 
    System.out.println("You chose to open this file: " + 
     chooser.getSelectedFile().getName()); 
} 
1

JMenuItem 또는 JButton에 대한 MouseListener 사용하지 마십시오 ,이 구성 요소를 관리하는 적절한 수단이 아니며 대신 ActionListener을 사용하십시오.

이 주된 이유는 메뉴 항목이 키보드 바로 가기를 통해 또는 프로그래밍 방식으로 트리거 될 수 있기 때문입니다.

두 번째로 "작동하지 않음"은 문제가 무엇인지에 대한 정보가 아니지만 메서드가 존재하지 않기 때문에 발생한다고 생각합니다.

간소 솔루션 ... 이벤트의 소스가 Component없는 경우가 Component을의 여부를 결정하기 위해 소스에게 이벤트를 확인하고 대신를 사용하거나 null하는 것

public void actionPerformed(ActionEvent evt) { 
    Object source = evt.getSource(); 
    Component parent = null; 
    if (source instanceof Component) { 
     parent = (Component)source; 
    } 

    // Show file chooser dialog... 
} 

당신은 또한 몇 가지 관심의 How to use actions을 찾을 수 있습니다 자세한 내용

에 대한 How to use menus를 살펴 보자

관련 문제