2011-03-10 6 views
13

JButton을 JLabel로 바꾸고 싶습니다. JLabel을 클릭 할 때 코드가 어떤 동작을 수행하기를 원합니다. 내가하는 JButton했다 때JLabel에 액션 리스너를 추가 할 수 있습니까?

나는 버튼 클릭을 처리하기 위해 액션 청취자를 사용 :

내가 myLabel에 의해 myButton 내가 이클립스에 다음과 같은 오류 메시지가있어 교체
myButton.addActionListener(new clicksListener(arg1,this)) 

:

을 메서드 addActionListener (ChipsListener)가 JLabel 유형에 대해 이 정의되지 않았습니다.

그러나 JLabel에 클릭 핸들러를 부착 할 수 있어야한다는 것을 알고 있습니다. 아무도 그것을 어떻게 할 수 있는지 알고 있습니까?

답변

23

JLabelMouseListener을 추가하십시오.

JLabelComponent이므로 MouseListener을 추가 할 수 있습니다. 해당 인터페이스를 사용하고 MouseListenermouseClicked 이벤트를 작성하여 클릭을 처리하십시오.

+0

여기에 논리가 없습니다. 모든 Component가'MouseListener' (임의의 참조)를 추가 할 수 있다는 것을 의미합니까? 그리고 어떤 종류의 위젯이 ActionListener를 추가 할 수 있습니까? – Tony

+2

예,'addMouseListener()'메소드는'Component'에 정의되어 있습니다. 이 클래스는, 마우스가 컴퍼넌트에 들어갔을 때, 또는 컴퍼넌트 내에서 버튼이 밀렸을 때, 또는 컴퍼넌트 내에서 버튼이 밀린 후에 해방되었을 때,'MouseEvent' 객체를 생성합니다. Component를 확장하는 모든 클래스는 이러한 이벤트를 수신하는 여러 개의 MouseListener 참조를 가질 수 있습니다. 'addActionListener()'는'AbstractButton'에 정의되어 있으며 버튼을 누를 때'ActionEvent' 객체를 생성합니다. 'JLabel'은'AbstractButton'을 확장하지 않으므로'ActionEvent' 객체를 생성하지 않습니다. 'JButton'을 시도하십시오. –

11

쉬운 방법은 이미 ActionListener를 사용하여이 기능을 지원하므로 JButton 만 사용하는 것입니다.

당신은 JButton를 사용하여 JLabel의처럼 보이게 할 수 있습니다

button.setBorderPainted(false); 

사용하는 경우이 방법은 반면의 mouseClicked 이벤트로, 당신은 ActionEvent의 인스턴스가 생성 될 보장되기 때문에, 마우스 클릭을 처리 할 때입니다 모든 상황에서 MouseListener가 생성되지 않아 사용자를 혼란스럽게 할 수 있습니다.

+0

더 복잡하니 두려워요. http://stackoverflow.com/questions/3025320/draw-a-jbutton-to-look-like-a-jlabel-or-at-least-without-the-button-edge – xmedeko

+0

mouseClicked 이벤트가 생성되지 않는 상황은 무엇입니까? – Buffalo

+1

@Buffalo, mouseClicked 이벤트는 동일한 지점에서 mousePressed 및 mouseReleased 이벤트가 생성 될 때 생성됩니다. 따라서 사용자가이 두 이벤트 사이의 픽셀로 마우스를 움직이면 mouseClicked를 얻지 못합니다. – camickr

7
/*add a mouselistener instead and listen to mouse clicks*/ 
    jlable.addMouseListener(new MouseAdapter() { 
       @Override 
       public void mouseClicked(MouseEvent e) { 
        System.out.println("Yay you clicked me"); 
       } 

      }); 
+0

게시 코드를 넘어선 설명을 항상 제공하십시오. 그 동안 분명히 사소한 일일 수 있지만 다른 사람들이 이해하기 어려울 수 있습니다. –

관련 문제