java - zapalanie jednego kwadratu

0

Chcę, aby mój kod podświetlił kwadrat, na którym klikne (działa). Nie wiem, jak to zrobić, że po kliknięciu na inny kwadrat poprzedni zgasł i zapalił się nowy. Jak poprawić metode mouseClicked?

public class App
{
    public static void main(String[] args)
    {
        new App();
    }

    App()
    {
        JFrame jFrame = new JFrame("Mouse Hover Demo");
        jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        jFrame.setLayout(new GridLayout(5,5));
        for(int i=0;i<25;i++)
        {
            jFrame.add(new CustomPanel(i));
        }
        jFrame.pack();
        jFrame.setLocationRelativeTo(null);
        jFrame.setVisible(true);
    }

    class CustomPanel extends JPanel implements MouseListener
    {
        /**
         * 
         */
        boolean isHighlighted;
        int postion;
        int tab[];

        private static final long serialVersionUID = 1L;
        Border blackBorder = BorderFactory.createLineBorder(Color.BLACK);

        CustomPanel(int postion)
        {
            this.postion = postion;
            addMouseListener(this);
            setBorder(blackBorder);
            setFocusable(true);
        }

        @Override
        public Dimension getPreferredSize()
        {
            return new Dimension(50, 50);
        }

        @Override public void mouseClicked(MouseEvent e)
        {

                System.out.println(this.postion);
                setBackground(Color.black);
        }
        @Override public void mousePressed(MouseEvent e){}
        @Override public void mouseReleased(MouseEvent e){}

        @Override
        public void mouseEntered(MouseEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mouseExited(MouseEvent e) {
            // TODO Auto-generated method stub

        }
    }
}
0

Klikasz, zapamiętujesz jego nr, z tym nie będziesz miał problemów bo nawet je wypisujesz na konsolę. Potem przy klikaniu następnego gdy ustawiasz kolor na poprzednim a obecnie świecącym ustawiasz kolor na biały.

0

Trochę niewygodne rozwiązanie, nie ma bezpośredniej drogi od zapamiętanego numeru panelu do samego panelu. Jedno rozwiązanie, to utworzenie w klasie App tablicy paneli, wtedy łatwo dotrzeć do panelu znając jego numer. Drugie rozwiązanie:

//pola w klasie App
CustomPanel previous = null;
Color color;
//instrukcja w konstruktorze klasy CustomPanel, potrzebna tylko po to wrócić do pierwotnego koloru (a nie np. do białego)
color = getBackground();
//metoda mouseClicked
@Override 
public void mouseClicked(MouseEvent e)
{
     if(previous != null)
     {
           previous.setBackground(color);
     }
     previous = this;
     setBackground(Color.black);
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1