Событие мыши JLabel работает дважды одним щелчком мыши - PullRequest
0 голосов
/ 12 декабря 2018

Это не было в последней версии, но в последней версии это работает дважды, хотя я нажал только один раз.

public void mouseClicked(MouseEvent e) {
    ((MouseListener)a).mouseClicked(e);
    ((MouseListener)b).mouseClicked(e);
}

Код взят из AWTEventMulticaster.class, который является классом библиотеки.Кажется, что когда я нажимаю один раз, слушатель просыпается дважды.Но странно, что слушатель работает дважды за одно событие.Мало того, все события мыши были изменены, чтобы работать дважды, поэтому все мои коды были разрушены.Есть ли какое-нибудь решение этого вопроса?

Более подробная информация здесь.Во-первых, код моего мышиного прослушивателя.

Label1.addMouseListener(new MouseAdapter()//Begin
    {
        public void mousePressed(MouseEvent e)
        {
            if(e.getButton()==MouseEvent.BUTTON1)
            {
                Label1.pointerInfo = MouseInfo.getPointerInfo();                    
                Label1.setIsPressed(true);
            }
        }
        public void mouseReleased(MouseEvent e)
        {
            if(e.getButton()==MouseEvent.BUTTON1)
            {
                if(Label1.getLocation().y<555 && Label1.getIsCard()==true)
                {                       
                    int cn = Label1.getCardNumX();
                    Label1.setCardNumY(getY(cn));                       
                    Label1.setText(null);
                    String s = "/image/\uBE14\uB85D "+Integer.toString(cn)+"-"+Integer.toString(Label1.getCardNumY())+".png";
                    ImageIcon im = new ImageIcon(Game.class.getResource(s));
                    Label1.setImage(im.getImage());
                    Label1.setIcon(setIconScale(im, Label1.getCardNumX(), Label1.getCardNumY(), 'L'));
                    Label1.setIsCard(false);
                }
                else if(Label1.getIsCard()==true)
                {
                    Label1.setBounds(70, 600, 150, 150);
                }
                else if(Label1.getLocation().y>675&&Used[0]!=1)
                {
                    Image I = Label1.getImage();
                    ImageIcon im;
                    if(Label1.getIsFlipped()==true)
                    {
                        BufferedImage i = convertToBufferedImage(I);
                        if(Label1.getRot()%2==1)
                            i= verticalFlip(i);
                        else
                            i = horizontalFlip(i);
                        im = new ImageIcon(i);
                    }
                    else
                        im = new ImageIcon(I);                  
                    im = setIconScale(im, Label1.getCardNumX(), Label1.getCardNumY(), 'L');
                    RotatedIcon i = new RotatedIcon(im, (0 - (Label1.getRot()*(90.0))));
                    Label1.setIcon(i);
                    Label1.setBounds(70, 600, 150, 150);
                }
                else if(Used[0]!=1)
                {
                    Icon r = Label1.getIcon();
                    if(Label1.getIsCard() == false && r!= null && BoardLavel.CheckBlock(MouseInfo.getPointerInfo(), Label1.a, Label1.BlockX, Label1.BlockY))                        
                    {
                        Used[0] = 1;
                        Deck[0] = 0;
                        CheckGreen();
                        Label1.setIcon(null);
                        score = score + 100 * BoardLavel.CheckErase();
                        Score.setText("Score = " + Integer.toString(score));
                    }
                    else
                    {
                        Image I = Label1.getImage();
                        ImageIcon im;
                        if(Label1.getIsFlipped()==true)
                        {
                            BufferedImage i = convertToBufferedImage(I);
                            if(Label1.getRot()%2==1)
                                i= verticalFlip(i);
                            else
                                i = horizontalFlip(i);
                            im = new ImageIcon(i);
                        }
                        else
                            im = new ImageIcon(I);                  
                        im = setIconScale(im, Label1.getCardNumX(), Label1.getCardNumY(), 'L');
                        RotatedIcon i = new RotatedIcon(im, (0 - (Label1.getRot()*(90.0))));
                        Label1.setIcon(i);
                    }
                }
                Label1.setBounds(70, 600, 150, 150);
                Label1.setIsPressed(false);
            }
        }
        public void mouseClicked(MouseEvent e)
        {
            if(Label1.isCard==false)
            {if(e.getButton()==MouseEvent.BUTTON3){
                Label1.changeIsFlipped();
                }
            else if(e.getButton()==MouseEvent.BUTTON1){
            if(Label1.getIsFlipped()==true)
            {
                Label1.setIsRotated(-1);
            }
            else
                Label1.setIsRotated(1);
            }
            Image image = Label1.getImage();
            ImageIcon ima;
            if(Label1.getIsFlipped()==true)
            {
                BufferedImage im = convertToBufferedImage(image);
                if(Label1.getRot()%2==1)
                    im = verticalFlip(im);
                else
                    im = horizontalFlip(im);
                ima = new ImageIcon(im);
            }
            else
                ima = new ImageIcon(image);
            ima = setIconScale(ima, Label1.getCardNumX(), Label1.getCardNumY(), 'L');
            RotatedIcon i = new RotatedIcon(ima, (0 - (Label1.getRot()*(90.0))));
            Label1.setIcon(i);
            }
        }
    });

Во-вторых, функции, используемые в Listner.

protected void CheckGreen() {
    for(int i=0;i<7;i++)
        for(int j=0;j<7;j++)
            if(BoardLavel.Board[i][j]==1)
            {
                switch(i)
                {
                case 0:
                {
                    switch(j)
                    {
                    case 0:
                        BoardLabel6_0.setIcon(GreenBoardimg);
                        break;
                    case 1:
                        BoardLabel6_1.setIcon(GreenBoardimg);
                        break;
                    case 2:
                        BoardLabel6_2.setIcon(GreenBoardimg);
                        break;
                    case 3:
                        BoardLabel6_3.setIcon(GreenBoardimg);
                        break;
                    case 4:
                        BoardLabel6_4.setIcon(GreenBoardimg);
                        break;
                    case 5:
                        BoardLabel6_5.setIcon(GreenBoardimg);
                        break;
                    case 6:
                        BoardLabel6_6.setIcon(GreenBoardimg);
                        break;
                    }
                }
                    break;
                case 1:
                {
                    switch(j)
                    {
                    case 0:
                        BoardLabel5_0.setIcon(GreenBoardimg);
                        break;
                    case 1:
                        BoardLabel5_1.setIcon(GreenBoardimg);
                        break;
                    case 2:
                        BoardLabel5_2.setIcon(GreenBoardimg);
                        break;
                    case 3:
                        BoardLabel5_3.setIcon(GreenBoardimg);
                        break;
                    case 4:
                        BoardLabel5_4.setIcon(GreenBoardimg);
                        break;
                    case 5:
                        BoardLabel5_5.setIcon(GreenBoardimg);
                        break;
                    case 6:
                        BoardLabel5_6.setIcon(GreenBoardimg);
                        break;
                    }
                }
                    break;
                case 2:
                {
                    switch(j)
                    {
                    case 0:
                        BoardLabel4_0.setIcon(GreenBoardimg);
                        break;
                    case 1:
                        BoardLabel4_1.setIcon(GreenBoardimg);
                        break;
                    case 2:
                        BoardLabel4_2.setIcon(GreenBoardimg);
                        break;
                    case 3:
                        BoardLabel4_3.setIcon(GreenBoardimg);
                        break;
                    case 4:
                        BoardLabel4_4.setIcon(GreenBoardimg);
                        break;
                    case 5:
                        BoardLabel4_5.setIcon(GreenBoardimg);
                        break;
                    case 6:
                        BoardLabel4_6.setIcon(GreenBoardimg);
                        break;
                    }
                }
                    break;
                case 3:
                {
                    switch(j)
                    {
                    case 0:
                        BoardLabel3_0.setIcon(GreenBoardimg);
                        break;
                    case 1:
                        BoardLabel3_1.setIcon(GreenBoardimg);
                        break;
                    case 2:
                        BoardLabel3_2.setIcon(GreenBoardimg);
                        break;
                    case 3:
                        BoardLabel3_3.setIcon(GreenBoardimg);
                        break;
                    case 4:
                        BoardLabel3_4.setIcon(GreenBoardimg);
                        break;
                    case 5:
                        BoardLabel3_5.setIcon(GreenBoardimg);
                        break;
                    case 6:
                        BoardLabel3_6.setIcon(GreenBoardimg);
                        break;
                    }
                }
                    break;
                case 4:
                {
                    switch(j)
                    {
                    case 0:
                        BoardLabel2_0.setIcon(GreenBoardimg);
                        break;
                    case 1:
                        BoardLabel2_1.setIcon(GreenBoardimg);
                        break;
                    case 2:
                        BoardLabel2_2.setIcon(GreenBoardimg);
                        break;
                    case 3:
                        BoardLabel2_3.setIcon(GreenBoardimg);
                        break;
                    case 4:
                        BoardLabel2_4.setIcon(GreenBoardimg);
                        break;
                    case 5:
                        BoardLabel2_5.setIcon(GreenBoardimg);
                        break;
                    case 6:
                        BoardLabel2_6.setIcon(GreenBoardimg);
                        break;
                    }
                }
                    break;
                case 5:
                {
                    switch(j)
                    {
                    case 0:
                        BoardLabel1_0.setIcon(GreenBoardimg);
                        break;
                    case 1:
                        BoardLabel1_1.setIcon(GreenBoardimg);
                        break;
                    case 2:
                        BoardLabel1_2.setIcon(GreenBoardimg);
                        break;
                    case 3:
                        BoardLabel1_3.setIcon(GreenBoardimg);
                        break;
                    case 4:
                        BoardLabel1_4.setIcon(GreenBoardimg);
                        break;
                    case 5:
                        BoardLabel1_5.setIcon(GreenBoardimg);
                        break;
                    case 6:
                        BoardLabel1_6.setIcon(GreenBoardimg);
                        break;
                    }
                }
                    break;
                case 6:
                {
                    switch(j)
                    {
                    case 0:
                        BoardLabel0_0.setIcon(GreenBoardimg);
                        break;
                    case 1:
                        BoardLabel0_1.setIcon(GreenBoardimg);
                        break;
                    case 2:
                        BoardLabel0_2.setIcon(GreenBoardimg);
                        break;
                    case 3:
                        BoardLabel0_3.setIcon(GreenBoardimg);
                        break;
                    case 4:
                        BoardLabel0_4.setIcon(GreenBoardimg);
                        break;
                    case 5:
                        BoardLabel0_5.setIcon(GreenBoardimg);
                        break;
                    case 6:
                        BoardLabel0_6.setIcon(GreenBoardimg);
                        break;
                    }
                }
                    break;
            }
        }
}
protected RotatedIcon rotate(Icon icon)
{
    RotatedIcon rot = new RotatedIcon(icon, -90);
    return rot;
}
protected Image RescaledBlock(ImageIcon icon, int x, int y)
{
    Image origin = icon.getImage();
    Image chan= origin.getScaledInstance(x, y, Image.SCALE_SMOOTH );
    return chan;
}
public static BufferedImage horizontalFlip(BufferedImage img) {
    int w = img.getWidth();
    int h = img.getHeight();
    BufferedImage flippedImage = new BufferedImage(w, h, img.getType());
    Graphics2D g = flippedImage.createGraphics();
    g.drawImage(img, 0, 0, w, h, w, 0, 0, h, null);
    g.dispose();
    return flippedImage;
}
public static BufferedImage convertToBufferedImage(Image image)
{
    BufferedImage newImage = new BufferedImage(
        image.getWidth(null), image.getHeight(null),
        BufferedImage.TYPE_INT_ARGB);
    Graphics2D g = newImage.createGraphics();
    g.drawImage(image, 0, 0, null);
    g.dispose();
    return newImage;
}
public static BufferedImage verticalFlip(BufferedImage img) {
    int w = img.getWidth();
    int h = img.getHeight();
    BufferedImage flippedImage = new BufferedImage(w, h, img.getColorModel().getTransparency());
    Graphics2D g = flippedImage.createGraphics();
    g.drawImage(img, 0, 0, w, h, 0, h, w, 0, null);
    g.dispose();
    return flippedImage;
}
public ImageIcon setIconScale(ImageIcon i, int x, int y, char ch)
{
    ImageIcon im = i;
    if(x==1)
    {
        if(ch=='s')
            im = new ImageIcon(RescaledBlock(im, 20, 20));
        else
            im = new ImageIcon(RescaledBlock(im, 50, 50));
    }
    if(x==2)
    {
        if(y==0)
        {
            if(ch=='s')
                im = new ImageIcon(RescaledBlock(im, 40, 20));
            else
                im = new ImageIcon(RescaledBlock(im, 100, 50));
        }
        else
        {
            if(ch=='s')
                im = new ImageIcon(RescaledBlock(im, 40, 40));
            else
                im = new ImageIcon(RescaledBlock(im, 100, 100));
        }
    }
    if(x==3)
    {
        if(y==0)
        {
            if(ch=='s')
                im = new ImageIcon(RescaledBlock(im, 60, 20));
            else
                im = new ImageIcon(RescaledBlock(im, 150, 50));
        }
        else if(y==1)
        {
            if(ch=='s')
                im = new ImageIcon(RescaledBlock(im, 40, 40));
            else
                im = new ImageIcon(RescaledBlock(im, 100, 100));
        }
        else if(y==2)
        {
            if(ch=='s')
                im = new ImageIcon(RescaledBlock(im, 60, 60));
            else
                im = new ImageIcon(RescaledBlock(im, 150, 150));
        }
        else
        {
            if(ch=='s')
                im = new ImageIcon(RescaledBlock(im, 60, 40));
            else
                im = new ImageIcon(RescaledBlock(im, 150, 100));
        }
    }
    if(x==4)
    {
        if(y==0)
        {
            if(ch=='s')
                im = new ImageIcon(RescaledBlock(im, 40, 40));
            else
                im = new ImageIcon(RescaledBlock(im, 100, 100));
        }
        else if(y==1||y==2||y==3||y==6)
        {
            if(ch=='s')
                im = new ImageIcon(RescaledBlock(im, 60, 40));
            else
                im = new ImageIcon(RescaledBlock(im, 150, 100));
        }
        else
        {
            if(ch=='s')
                im = new ImageIcon(RescaledBlock(im, 60, 60));
            else
                im = new ImageIcon(RescaledBlock(im, 150, 150));
        }
    }
    if(x==5)
    {
        if(y==3)
        {
            if(ch=='s')
                im = new ImageIcon(RescaledBlock(im, 60, 40));
            else
                im = new ImageIcon(RescaledBlock(im, 150, 100));
        }
        else if(y==7)
        {
            if(ch=='s')
                im = new ImageIcon(RescaledBlock(im, 40, 60));
            else
                im = new ImageIcon(RescaledBlock(im, 100, 150));
        }
        else
        {
            if(ch=='s')
                im = new ImageIcon(RescaledBlock(im, 60, 60));
            else
                im = new ImageIcon(RescaledBlock(im, 150, 150));
        }
    }
    return im;
}
public int getY(int cn)
{
    Random ra = new Random();
    int a = 0;
    switch(cn)
    {
    case 1:
        a =  0;
        break;
    case 2:
        a = ra.nextInt(2);
        break;
    case 3:
        a = ra.nextInt(5);
        break;
    case 4:
        a = ra.nextInt(12);
        break;
    case 5:
        a = ra.nextInt(17);
        break;
    }
    return a;
}

В-третьих, класс RotatedIcon, найденный здесь;

https://tips4java.wordpress.com/2009/04/06/rotated-icon/

Если вам нужна дополнительная информация, пожалуйста, оставьте комментарий здесь.

...