Java JSlider: Словарь устарел для метода setLabelTable, что еще мне следует использовать? - PullRequest
1 голос
/ 06 февраля 2020

В настоящее время я пытаюсь настроить пользовательскую метку для JSlider в Java.

Я посмотрел в Java API и нашел этот метод: public void setLabelTable(Dictionary labels)

К сожалению получается, что класс Dictionary и его подкласс Hashtable устарели.

Согласно ответу на этот вопрос: Использование Java Словарь ... использование Hashtable?

Класс Hashtable был «заменен» на HashMap.

Поэтому я попытался отправить HashMap вместо Hashtable, что, как я сильно сомневался, сработает.

Как и ожидалось, компилятор выдал мне эту ошибку:

incompatible types: HashMap<Integer, JLabel> cannot be converted to Dictionary

Я могу выбрать использование Dictionary и Hashtable класса и скомпилировать с помощью Xlint:Deprecated и это даст мне желаемый результат.

Но я не хочу использовать то, что устарело какое-то время.

Что я должен использовать вместо setLabelTable(Dictionary labels) ?

Или нет другого способа, кроме использования setLabelTable(Dictionary labels)?

Desired Result

Я хочу произвести это GUI без использования де устаревший или устаревший API.

1 Ответ

1 голос
/ 06 февраля 2020

Классы Dictionary и Hashtable устарели для будущего использования и не должны использоваться для приложений, которым просто необходимо хранить пары ключ-значение. (Как вы видели, новые приложения должны использовать класс Collections HashMap.)

Тем не менее, все еще прекрасно использовать старые классы для приложений, подобных вашему, где вы вызываете другую функцию, которая нуждается в * 1006. * или Hashtable в качестве аргумента. У тебя действительно нет выбора.

Если вы хотите минимизировать объем кода в вашем проекте, который использовал более старые классы, вы можете использовать HashMap для хранения ваших меток, а затем использовать setLabelTable вместе с конструктором Hashtable, который строит Hashtable из HashMap следующим образом:

 mySlider.setLabelTable(new Hashtable(myLabelHashMap))
...