Java 如果单击前景,如何保持其颜色相同

Java 如果单击前景,如何保持其颜色相同,java,swing,mouselistener,Java,Swing,Mouselistener,单击组件后,无论将来有何鼠标操作,都应保持前景为Color.BLUE。我该怎么做 这是到目前为止我的代码,我觉得我应该使用一个boolean isntance变量来跟踪组件是否被单击,但不确定如何解决这个问题。非常感谢你的帮助 这是到目前为止我的代码 public class IdeaMouseListener implements MouseListener { //instance private JComponent x; //constructor

单击组件后,无论将来有何鼠标操作,都应保持前景为Color.BLUE。我该怎么做

这是到目前为止我的代码,我觉得我应该使用一个boolean 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);
    }

}

然后设置一个指示“单击”状态的标志,使用它来确定应该发生什么,例如

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);
        }
    }

}

设置侦听器的属性以控制组件的“单击”颜色。然后,仅当颜色不是单击的颜色时才更改颜色

比如:

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);
    }
}
请注意对代码的更改:

  • 您不需要将组件作为参数传入,因为您可以从MouseEvent获取该信息。所以代码更通用

  • 因为代码是通用的,所以所有组件都可以共享同一个侦听器

  • 你知道在“点击颜色”中传递。这不是必需的,但它使类更易于重用,因为您可以轻松地更改类的属性,而不是硬编码值


  • 设置标志以指示不应发生更改