当前位置: 首页 > 知识库问答 >
问题:

更改形状列表的颜色

万志专
2023-03-14

我被这个问题卡住了:

当我点击一个形状(有一个矩形和圆形列表)时,它会改变它的颜色。但当我点击外面时,它不会变回来。

public void mouseClicked(MouseEvent me) {
    Color colorAux;
    for (int i = 0; i < images.size(); i++) {
        colorAux = images.get(i).getColor();
        if (images.get(i).getShape() == "Rectangle") {
            if ((images.get(i).getLocation().getX() < me.getX() && images.get(i).getLocation().getY() < me.getY() && images.get(i).getX() + images.get(i).getWidth() > me.getX() && images.get(i).getLocation().getY() + images.get(i).getHeight() > me.getY())) {
                images.get(i).setColor(Color.BLUE);
                repaint();
                JOptionPane.showMessageDialog(null, colorAux); //Debug
            } else if (!(images.get(i).getLocation().getX() < me.getX() && images.get(i).getLocation().getY() < me.getY() && images.get(i).getX() + images.get(i).getWidth() > me.getX() && images.get(i).getLocation().getY() + images.get(i).getHeight() > me.getY()) && (images.get(i).getColor() == Color.BLUE)) {
                images.get(i).setColor(colorAux);           
                repaint();
            }
        }
    }

更具体地说,当我只画1个形状时,它工作!但是,例如,我绘制一个蓝色矩形、一个紫色圆和一个红色矩形,并单击其中一些形状,如红色矩形,每个形状都将其颜色改为蓝色。当我再次单击外部时,它会将每个形状的颜色更改为默认颜色(黑色)。

public void mouseClicked(MouseEvent me) {
    List<Color> colors = new ArrayList<Color>();
    for (int j = 0; j < images.size(); j++) {
        colors.add(images.get(j).getColor());
    }
    for (int i = 0; i < images.size(); i++) {
        if ((images.get(i).getLocation().getX() < me.getX() && images.get(i).getLocation().getY() < me.getY() && images.get(i).getX() + images.get(i).getWidth() > me.getX() && images.get(i).getLocation().getY() + images.get(i).getHeight() > me.getY())) {
            images.get(i).setColor(Color.BLUE);
            repaint();
        } else {
            images.get(i).setColor(colors.get(i));
            repaint();
        }
    }
}

共有1个答案

晋安国
2023-03-14

你在正确的想法中使用一个颜色列表(除非所有对象在开始时都有相同的颜色)。在这个列表中,您存储了所有对象的初始颜色以及您可以执行的

// initialColors is the list holding the initial colors
for (int i=0; i<images.size(); i++) {
    if (images.get(i).getShape() == "Rectangle") {
        if (/*code to check if we are inside the rectangle which you already have*/) {
            images.get(i).setColor(Color.BLUE);
            repaint();
        } else {
            images.get(i).setColor(initialColors.get(i));
            repaint();
        }
    } /* maybe add a case for getShape() == "Circle" */
}

您可以在创建和填充InitialColors列表的同时创建和填充Images列表(因为在那一刻,您就知道每个形状的颜色了)。

关于为什么您的方法不起作用:假设我们在一个矩形内单击,它的颜色更改为蓝色。当我们现在使用coloraux=images.get(i).getcolor()来获取颜色时,我们得到的是蓝色,因为我们改变了矩形的颜色。当我们到达images.get(i).setcolor(colorAux)时,我们将蓝色矩形的颜色设置为蓝色,这意味着什么也没有发生。

编辑:现在您添加到问题中的更改不起作用,因为我们仍然有同样的问题:我们在mouseclicked事件中获得颜色,而不是在形状最初着色时获得颜色。这意味着我们用当前的颜色(可能已经改为蓝色)来填充颜色列表,而不是初始的颜色。您应该将添加的循环移动到最初为形状着色的地方(可能是填充Images列表的地方)。

 类似资料:
  • 我有一个RecycerView,在那里我创建了12个ImageButton默认情况下,它们都是黑色的,因为我为imageButton创建了一个具有黑色纯色的自定义形状。自定义形状设置为imageButtons背景 形状: 这就是ImageButtons现在的样子。但它们都有相同的颜色,这不是我想要的。 } 这是来自我的RecycerView适配器类,我在其中infalte layout.item_

  • 我想把点的形状设为一个圆。我就是这样做的: 然后我得到以下结果: 圆圈略微移动。我试图更改,以便根据直线将圆居中,但没有任何效果。什么是使圆圈居中的正确方法?

  • 问题来了:我的应用程序中有几个面板,形状与背景相同,但对于每个形状,我想要不同的边框(笔画)颜色。我不想创建3个形状,唯一的区别是在笔画颜色上。是否可以在运行时更改笔划值?

  • 问题内容: 我是Java的新手,但需要知道开发人员是否有可能,以便 他/她可以更改的形状JProgressBar。我的意思是假设 我想更改形状,使其看起来像圆形或 其他形状? 尽管我只是希望将其从条形更改为弧形,或者 可以说我想将条形更改为任何其他形状。我的进度条 可能看起来像条形以外的曲线。我想在其中添加一条曲线。 问题答案: a的外观JProgressBar由组件的UI委托控制,该委托通常从派

  • 问题内容: 我正在尝试将状态栏的颜色更改为蓝色或其他某种颜色。 这可能吗,或者Apple不允许吗? 问题答案: 注意:此解决方案在iOS 13及更高版本下失败。 Plist中的第一个设置为 输出屏幕截图如下

  • 是的,所以我不知道我在做什么。哈。 我想改变select2的未打开的下拉菜单的颜色(也许还有边上的按钮),但是寻找解决方案只是设法阻碍了我 这样可以更改选项(这很好!)但并不是我想要的100%。 有没有改变下拉初始状态颜色的类