Как использовать HashMap для сравнения и сопоставления цветов - PullRequest
0 голосов
/ 26 мая 2019

Я хочу сопоставить текст результатов цветного поиска с текстом флажка после нажатия кнопки поиска. Смотрите рис.

В настоящее время я могу просмотреть цвет текста результатов поиска, но он не соответствует цвету текста флажка после нажатия кнопки поиска. Приведенный ниже код предназначен только для текстовой области «Результаты поиска автомобилей» и класса с именем CarBrand, который соответствует ключу этого элемента HashMap carDetails. Я не уверен, как сравнить и сопоставить его цвет с помощью 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 (Honda, Hundai, BMW), как на картинке ниже.

car result output

1 Ответ

0 голосов
/ 27 мая 2019

Я согласен с Эндрю Томпсоном: отсутствует много кода, чтобы можно было воспроизвести вашу проблему.

Вам следует проверить, правильны ли ваши условия (если заявления).Объявление 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.

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