簡體   English   中英

如何使用MouseListener啟動后台線程?

[英]How do I need to start a background thread using MouseListener?

我的代碼的想法是,當我的鼠標進入特定的jscrollpane時,它開始打印出它下面的rgb值。 我希望它在我的鼠標退出jscrollpane時停止打印出這些rgb值。

try{
    String path = "C:\\Users\\Bernard\\Documents\\viking\\map\\provinces.bmp";
    Image image = ImageIO.read(new File(path));
    ImageIcon icon = new ImageIcon(image);
    lblMap = new JLabel(icon);
    JPanel jp = new JPanel();
    jp.add(lblMap);
    provincesPanel.add(jScrollPane1);
    jScrollPane1.setViewportView(jp);
    jScrollPane1.setAlignmentX(JFrame.RIGHT_ALIGNMENT);
    jScrollPane1.addMouseListener(new MouseListener() {
    @Override
    public void mouseClicked(MouseEvent me) {
    }

    @Override
    public void mousePressed(MouseEvent me) {
    }

    @Override
    public void mouseReleased(MouseEvent me) {
    }

    @Override
    public void mouseEntered(MouseEvent me) {
        mapMuis =true;
        SwingWorker sw = new SwingWorker<Color, Color>() {

                @Override
                protected Color doInBackground() {
                    while (mapMuis==true){
                    pointer = MouseInfo.getPointerInfo();
                    point = pointer.getLocation();
                    color = robot.getPixelColor((int) point.getX(), (int) point.getY());
                    System.out.println("Color at: " + point.getX() + "," + point.getY() + " is: " + color);
                    return color;
                    }
                    return color;
                }
            };
    }

    @Override
    public void mouseExited(MouseEvent me) {
        mapMuis=false;
    }
});    

然而,當我的鼠標進入jscrollpane時,我根本沒有輸出。

感謝您的時間。

解決方案:我chlk了MouseListener並實現了MouseMotion:

            jScrollPane1.addMouseMotionListener(new MouseMotionListener() {

            @Override
            public void mouseDragged(MouseEvent me) {
                throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
            }

            @Override
            public void mouseMoved(MouseEvent me) {
                    pointer = MouseInfo.getPointerInfo();
                    point = pointer.getLocation();
                    color = robot.getPixelColor((int) point.getX(), (int) point.getY());
                    System.out.println("Color at: " + point.getX() + "," + point.getY() + " is: " + color); //To change body of generated methods, choose Tools | Templates.
            }
        });

您可以簡單地使用MouseMotionListenermouseMoved事件來實現相同的結果,而無需任何Thread s

有關詳細信息,請參閱如何編寫鼠標 - 運動監聽器

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM