Что такое java.awt. Component.getName () и setName () используемый для?

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

22
задан palacsint 31 March 2015 в 11:45
поделиться

7 ответов

Component.setName (..) используется в JDK главным образом классами реализации стиля для установки подобных ИДЕНТИФИКАТОРУ строк для каждого компонента, например, BasicOptionPaneUI мог бы назвать его на компоненте кнопки для определения его имени к "OptionPane.button".

getName () используется в toString () методы при определении имен дочерних компонентов в Составном/родительском Компоненте и в AWT и коде входа отладки Swing. Я подозреваю сильно, что getName () метод также используется некоторыми средами тестирования AWT/Swing.

Поэтому, если Вы не зависите ни от одного вышеупомянутого использования getName (), Вы могли бы попытаться использовать его для своих сообщений справки, хотя я не рекомендую это.

, Возможно, необходимо ли пересмотреть дизайн? Используйте имя, чтобы сделать некоторый поиск в hashmap, который загружает текст справки из пакета ресурса?

20
ответ дан 29 November 2019 в 05:19
поделиться

Я не видел, что это использовало для чего-либо платформой. Его полезное, если у Вас есть компоненты, передаваемые в к методу, таким образом, можно попросить, чтобы их имя решило, как обработать их. Кроме того, много сред тестирования UI используют это, чтобы позволить Вам обращаться к компонентам по имени в сценариях тестирования. Я не вижу оснований, Вы не можете использовать их для текста справки все же.

6
ответ дан 29 November 2019 в 05:19
поделиться

Кроме того, так как я думаю java.awt. Компонент является тяжелым объектом в X, программы как xwininfo и xwd могли бы позволить Вам определять его по имени.

я просто попробовал его JFrame, и setName не определял имя окна, окно назвала строка, которую я передал в конструкторе. Но у меня нет немного awt-только примера кода для тестирования с, таким образом, я мог быть неправ относительно того, что я записал выше.

0
ответ дан 29 November 2019 в 05:19
поделиться

Ответ Herman Lintvelt закончил тем, что был корректным для моего приложения.

я создал пакет ресурса по имени HelpText.properties. Это содержит name=value пар. Я setName () d каждый из моих Компонентов с "именем" от name=value пары. Я тогда использовал getGlassPane кадра () для получения всех движений мыши. Когда мышь работает на основе именованного компонента, она ищет имя в пакете, справка дисплеев при наличии и вперед движение мыши к фактическому Компоненту.

Ух. Ценность только 2 дней укорачивания вокруг. Я наконец начинаю привыкать к Java:)

1
ответ дан 29 November 2019 в 05:19
поделиться

Метод component.getName () в основном используется со слушателями. Если вы задаете имя компонента ( component.setName (name) ), вы можете вызвать этот конкретный компонент из метода Listener .

Пример:

public void someMethodOfsomeListener(SomeEvent e){
   if (e.getComponent().getName().equals(component.getName())
      //do stuff...
}

] Имейте в виду, что вы должны явно указать имя компонента, иначе он вернет null .

2
ответ дан 29 November 2019 в 05:19
поделиться

Я использую его для обработки слушателей в одном классе отдельно. Я получаю в качестве параметра компонент, который содержит мой объект. AddListener не как контейнер, а как класс, содержащий этот объект. Спасибо Vivavinyl за подсказку о том, как сначала установить имя. Это было полезно и сработало.

0
ответ дан 29 November 2019 в 05:19
поделиться

Вот для чего я использую getName ():

    Frame[] frames = JFrame.getFrames();

    for (int i = 0; i < frames.length; ++i) {

        //get the frame
        Frame frame = frames[i];

        if (frame.getName().equals(frameName)) {

            //make the frame visible
            frame.setVisible(true);

            //focus the frame
            frame.requestFocus();

            //found
            return;

        }

    }
0
ответ дан 29 November 2019 в 05:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: