java - 如何使用HashMap进行颜色比较和匹配

标签 java hashmap

我想在单击搜索按钮后将颜色搜索结果文本与复选框文本相匹配。见图。

目前我可以查看搜索结果文本颜色,但单击搜索按钮后它与复选框文本颜色不匹配。下面的代码仅适用于搜索汽车结果文本区域和与此 HashMap carDetails 的键匹配的名为 CarBrand 的类。我不知道如何使用 HashMap 来比较和匹配它的颜色。任何建议都会很棒!

import java.awt.Color;
import java.swing.tree.DefaultTreeCellRenderer

public final class CarDetails extends DefaultTreeCellRenderer
{
    private final Color defaultColor;
    private final HashMap<String, Color> carDetails = new HashMap<>();

    public CarDetails()
    {
        int i = 0;
        defaultColor = getBackground(); //default color
        int [][] rgb = {
            { 200, 000, 200 },
            { 000, 140, 000 },
            { 000, 200, 200 }

        };
        for (CarBrand car: CarModel.getCarBrandDetails()) {
            carDetails.put(car.getCarBrand(), new Color(
                rgb[i][0], rgb[i][1], rgb[i][2]));
            i++;
            // TODO this part is what I am not sure.
            if (carDetails.containsKey(car.getCarBrand()) && carTable != null) {
                for (Component c : carTable.getComponents()) {
                    if (c.getName().equals(car.getCarBrand())) {
                       c.setForeground(carDetails.containsObject(new 
                              Color(rgb[i][0], rgb[i][1], rgb[i][2])));
                    }
                }
            }
        }
    }
}

我希望输出能够将搜索汽车结果的颜色编码与复选框文本(本田、现代、宝马)相匹配,如下图所示。

car result output

最佳答案

我同意安德鲁·汤普森的观点,缺少很多代码来重现您的问题。

您应该检查您的条件是否正确(if 语句)。 carTable 的声明丢失,因此我们无法验证它是如何构建的。您使用 Component.getName(),您确定这包含您期望的值吗? 请参阅what-is-java-awt-component-getname-and-setname-used-for 默认情况下它不会填充,因此如果您之前使用预期值填充它,则可以使用。

假设 c.getName() 返回 carBrand 的名称,您可以执行以下操作:

    for (CarBrand car: CarModel.getCarBrandDetails()) {
        carDetails.put(car.getCarBrand(), new Color(
            rgb[i][0], rgb[i][1], rgb[i][2]));
        i++;
    }
    if (carTable != null) {
        for (Component c : carTable.getComponents()) {
            if(carDetails.containsKey(c.getName()) {
                c.setForeground(carDetails.get(c.getName())));
            }
        }
    }

在您的代码中,您没有使用之前填写的 carDetails map 中的值。通过调用“carDetails.get()”方法,您可以重用创建的 Color 对象。

关于java - 如何使用HashMap进行颜色比较和匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56309362/

相关文章:

java - 使用流收集 HashMap 中的事件

java - 使用 XStream 反序列化通用类型

java - Hibernate Projections - Projections.property 和 Projections.groupProperty 之间有什么区别

java - 如何在 10x10 的网格的每个部分放置数字?

java - 面向对象设计 : Scalable and maintainable car store system

Grails 动态渲染 map-injected g :select

java - 这段代码怎么会导致死锁呢?

java - 深度复制具有集合值的 Java Map

ruby-on-rails - 匹配具有最大相似性的 2 个哈希的有效方法

arrays - 如何取消引用这个数组?我如何将这个数组存储到散列中?