簡體   English   中英

Java-僅突出顯示一個字段

[英]java - highlighting only one field

我想使我的代碼突出顯示我單擊的正方形(此方法有效)。 我不知道該怎么做,當您單擊另一個先前死掉的方塊並點亮一個新的方塊時。 如何改善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

        }
    }
}

例如,在App類中,您可以具有作為CustomPanels表的字段( private CustomPanel[] myCustomPanels以及另一個字段-整數private int highlightedOne = -1 ,它將指向突出顯示的元素的索引。

然后在方法mouseClicked您可以執行以下操作:

@Override public void mouseClicked(MouseEvent e)
        {

                System.out.println(this.postion);
                if (highlightedOne != -1) 
                    myCustomPanels[highlightedOne].setBackground(Color.white);
                highlightedOne = this.position;
                setBackground(Color.black);
        }

欄目部分:

public class App
{

    private CustomPanel[] myCustomPanels = new CustomPanel[25];
    private int highlightedOne = -1;

    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++)
        {
            CustomPanel toAdd = new CustomPanel(i);
            myCustomPanels[i] = toAdd;
            jFrame.add(toAdd);
        }
        jFrame.pack();
        jFrame.setLocationRelativeTo(null);
        jFrame.setVisible(true);
    }
...

或者,您可以使用列表而不是表-您不需要在開始時將大小傳遞給它。

暫無
暫無

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

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