如何使用HashMap比较和匹配颜色

时间:2019-05-25 22:56:19

标签: 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])));
                    }
                }
            }
        }
    }
}

我希望输出如下图所示,将搜索车结果的颜色编码与CheckBox文本(本田,现代,宝马)匹配。

car result output

1 个答案:

答案 0 :(得分:0)

我同意安德鲁·汤普森(Andrew Thompson)的建议,因为缺少很多代码,无法重现您的问题。

您应该检查条件是否正确(如果声明)。 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映射中的值。通过调用´carDetails.get()方法,您可以重用创建的Color对象。