как сохранить передний план того же цвета, если его щелкнули - PullRequest
0 голосов
/ 12 мая 2018

После того, как компонент был нажат, он должен оставаться с передним планом Color.BLUE независимо от каких-либо действий мыши в будущем.Как я могу это сделать?

пока это мой код, я чувствую, что должен использовать булеву переменную isntance, чтобы отслеживать, был ли нажат компонент, но не уверен, как решить эту проблему.Помощь очень ценится.

это мой код до сих пор

public class IdeaMouseListener implements MouseListener {

    //instance      
    private JComponent x;

    //constructor
    public IdeaMouseListener(JComponent x){         
        this.x =x;          
    }

    @Override
    public void mouseClicked(MouseEvent e) {
        // TODO Auto-generated method stub
        x.setForeground(Color.BLUE);
    }

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

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

    @Override
    public void mouseEntered(MouseEvent e) {
        // TODO Auto-generated method stub
        x.setForeground(Color.LIGHT_GRAY);
    }

    @Override
    public void mouseExited(MouseEvent e) {
        // TODO Auto-generated method stub
        x.setForeground(Color.WHITE);
    }

}

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

Установите свойство слушателя для управления цветом "нажал" компонента.Тогда вы меняете цвет только тогда, когда он не является цветом, по которому щелкнули.

Что-то вроде:

public class IdeaMouseListener implements MouseListener {

    //instance      
    private Color clickedColor;

    //constructor
    public IdeaMouseListener(Color clickedColor){         
        this.clickedColor = clickedColor;          
    }

    @Override
    public void mouseClicked(MouseEvent e) {
        // TODO Auto-generated method stub
        Component source = e.getComponent();
        source.setForeground(clickedColor);
    }

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

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

    @Override
    public void mouseEntered(MouseEvent e) {
        // TODO Auto-generated method stub
        Component source = e.getComponent();
        if (!source.getForeground.equals(clickedColor)
            component.setForeground(Color.LIGHT_GRAY);
    }

    @Override
    public void mouseExited(MouseEvent e) {
        // TODO Auto-generated method stub
        Component source = e.getComponent();
        if (!source.getForeground.equals(clickedColor)
            component.setForeground(Color.WHITE);
    }
}

Обратите внимание на изменения в коде:

  1. Вам не нужно передавать компонент как параметр, потому что вы можете получить эту информацию из MouseEvent.Таким образом, код является более общим

  2. Поскольку код является общим, один и тот же слушатель может быть общим для всех компонентов.

  3. Вы знаете, передать«нажал цвет».В этом нет необходимости, но это делает класс более пригодным для повторного использования, поскольку вы можете легко изменить свойство класса вместо жесткого кодирования значения.

0 голосов
/ 12 мая 2018

Затем установите флаг, который указывает состояние «нажал», используйте это, чтобы определить, что должно произойти, например,

public class IdeaMouseListener implements MouseListener {

    //instance      
    private JComponent x;
    private boolean wasClicked = false;

    //constructor
    public IdeaMouseListener(JComponent x) {
        this.x = x;
    }

    @Override
    public void mouseClicked(MouseEvent e) {
        // TODO Auto-generated method stub
        x.setForeground(Color.BLUE);
        wasClicked = true;
    }

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

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

    @Override
    public void mouseEntered(MouseEvent e) {
        // TODO Auto-generated method stub
        if (!wasClicked) {
            x.setForeground(Color.LIGHT_GRAY);
        }
    }

    @Override
    public void mouseExited(MouseEvent e) {
        // TODO Auto-generated method stub
        if (!wasClicked) {
            x.setForeground(Color.WHITE);
        }
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...