2015-01-16 1 views
0

기본적으로 Task 클래스가 JComponent를 확장하고 각 작업이 서로 겹칠 수 있습니다. 하나의 작업을 마우스로 누르면 다른 작업과 겹치면 앞에 놓을 수 있습니다. 그런 다음 다른 위치로 끌어서 놓을 수 있습니다. 그것은 마우스와 같은 모든 후속 이벤트를 끌고 자바 7에서 잘 작동하지만, 자바 8에 실패 마우스를 누르면 마우스가 사전에 감사Java 8의 부모 구성 요소에 다시 추가 된 후 구성 요소가 마우스 이벤트를 더 이상 수신하지 않음

// Task.java 

public class Task extends JComponent{ 
    String _text; 
    public Task(String text){ 
     _text = text; 
     new TaskListener(this); 
    } 
} 


// TaskListener.java 

import java.awt.Container; 
import java.awt.event.MouseEvent; 
import javax.swing.event.MouseInputAdapter; 

public class TaskListener extends MouseInputAdapter { 

    private Task _task; 

    public TaskListener(Task task){ 
     _task = task; 
     _task.addMouseListener(this); 
     _task.addMouseMotionListener(this); 
    } 

    public void mouseDragged(MouseEvent e) { 
     System.out.println("mouse dragged"); 
    } 

    public void mouseClicked(MouseEvent e) { 
     System.out.println("mouse clicked"); 
    } 

    public void mouseEntered(MouseEvent e) { 
     System.out.println("mouse entered"); 
    } 

    public void mouseExited(MouseEvent e) { 
     System.out.println("mouse exited"); 
    } 

    public void mouseMoved(MouseEvent e) { 
     System.out.println("mouse moved"); 
    } 

    public void mousePressed(MouseEvent e) { 
     System.out.println("mouse pressed"); 
     // to get task to front in case it is overlapped by other tasks 
     // which will prevent follow up events from firing out in Java 8 
     Container parent = _task.getParent(); 
     parent.remove(_task); 
     parent.add(_task, 0); 
     _task.repaint(); 
    } 

    public void mouseReleased(MouseEvent e) { 
     System.out.println("mouse released"); 
    } 
} 

자바 8에서 해고되지 않습니다 이후에 출시.

답변

0

작업을 다시 추가하는 대신 parent.setComponentZOrder (_task, 0) 을 사용하여 작업의 z 순서를 변경하여 맨 앞으로 되돌립니다.

관련 문제