2013-06-19 2 views
-2

JList 문제가 있습니다. 이 JList (마우스와 키보드 모두)에 대한 리스너가 있습니다. 목록의 옵션 중 하나를 두 번 클릭하거나 Enter를 누르면 JFrame이 닫히고 싶습니다. 나는 그것을 어디에서도 발견 할 수 없었다. 그걸 도와 주실 수 있겠습니까?JList의 jFrame을 닫으려면 어떻게해야합니까?

Window window = SwingUtilities.getWindowAncestor(ActionJList.this); 
if (window!=null) 
    window.setVisible(false); 

NB :

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

public class ActionJList extends JList { 

    ActionListener al; 
    boolean close=false; 

    public ActionJList(String[] it){ 
    super(it); 

    addMouseListener(new MouseAdapter() { 
     public void mouseClicked(MouseEvent me) { 
     if (al == null) return; 
     Object ob[] = getSelectedValues(); 
     if (ob.length > 1) return; 
     if (me.getClickCount() == 2) { 
      System.out.println("Sending ACTION_PERFORMED to ActionListener"); 
      al.actionPerformed(new ActionEvent(this, 
      ActionEvent.ACTION_PERFORMED, 
      ob[0].toString())); 
      me.consume(); 
      close=true; 

     } 
     } 
    }); 

    addKeyListener(new KeyAdapter() { 
     public void keyReleased(KeyEvent ke) { 
     if (al == null) return; 
     Object ob[] = getSelectedValues(); 
     if (ob.length > 1) return; 
     if (ke.getKeyCode() == KeyEvent.VK_ENTER) { 
      System.out.println("Sending ACTION_PERFORMED to ActionListener"); 
      al.actionPerformed(new ActionEvent(this, 
      ActionEvent.ACTION_PERFORMED, 
      ob[0].toString())); 
      ke.consume(); 
     } 
     } 
    }); 
    this.setSelectedIndex(0); 
    } 

    public ActionJList(Vector it){ 
    super(it); 

    addMouseListener(new MouseAdapter() { 
     public void mouseClicked(MouseEvent me) { 
     if (al == null) return; 
     Object ob[] = getSelectedValues(); 
     if (ob.length > 1) return; 
     if (me.getClickCount() == 2) { 
      System.out.println("Sending ACTION_PERFORMED to ActionListener"); 
      al.actionPerformed(new ActionEvent(this, 
      ActionEvent.ACTION_PERFORMED, 
      ob[0].toString())); 
      me.consume(); 
     } 
     } 
    }); 

    addKeyListener(new KeyAdapter() { 
     public void keyReleased(KeyEvent ke) { 
     if (al == null) return; 
     Object ob[] = getSelectedValues(); 
     if (ob.length > 1) return; 
     if (ke.getKeyCode() == KeyEvent.VK_ENTER) { 
      System.out.println("Sending ACTION_PERFORMED to ActionListener"); 
      al.actionPerformed(new ActionEvent(this, 
      ActionEvent.ACTION_PERFORMED, 
      ob[0].toString())); 
      ke.consume(); 
     } 
     } 
    }); 
    this.setSelectedIndex(0); 
    } 



    public void addActionListener(ActionListener al){ 
    this.al = al; 
    } 
    public boolean getClose(){return close;} 
} 
+0

코드를 잘못 찾았습니까? –

답변

3

당신은 항상 다음 코드를 사용할 수 있습니다 여기에

가 (에 StackOverflow에서 촬영) 내가 사용하는 클래스의 대신 추가하는 KeyListener/KeyAdapter 당신의 JList에을 고려 Swing KeyBindings를 사용합니다.

+0

+1 많은 유용한 메소드가있는 SwingUtilities 클래스를 사용합니다. – camickr

+0

아주 좋았습니다.이 기능을 사용할 수 있다는 것을 깨닫지 못했습니다. –

1

MouseListener와 Key Bindings를 추가하는 재사용 가능한 클래스에 대해 List Action을 확인해보십시오. 또한 이벤트 소스는 JList이므로 기ume의 제안을 사용하여 액션을 쉽게 만들 수 있습니다.

사용할 수있는 JFrame에 대한 참조를 만들 필요가 없습니다. SwingUtilities 접근 방식이 더 좋습니다.

관련 문제