Для чего используются java.awt.Component.getName () и setName ()?

Для чего используется java.awt.Component.getName()? В приложениях, которые я создаю с помощью NetBeans, всегда кажется, что это null. Я подумываю сохранить в нем некоторый текст справки для каждого компонента - я не хочу использовать всплывающую подсказку, у меня есть другая панель, где я покажу текст справки.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
22
0
23 213
9
Перейти к ответу Данный вопрос помечен как решенный

Ответы 9

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

Мы используем его для тестирования роботов / пользовательского интерфейса.

John Gardner 22.10.2008 23:41

Мы также используем его для тестирования роботов / пользовательского интерфейса.

Jason 04.11.2017 16:00

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

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

Ответ принят как подходящий

Component.setName (..) используется в JDK в основном классами реализации внешнего вида для установки ID-подобных строк для каждого компонента, например BasicOptionPaneUI может вызвать его в компоненте кнопки, чтобы присвоить ему имя «OptionPane.button».

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

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

Может стоит пересмотреть свой дизайн? Использовать имя для поиска в хэш-карте, которая загружает текст справки из пакета ресурсов?

Ответ Германа Линтвельта оказался правильным для моего приложения.

Я создал пакет ресурсов под названием HelpText.properties. Он содержит пары имя = значение. Я установил имя () d для каждого из моих Компонентов с «именем» из пары имя = значение. Затем я использовал getGlassPane () кадра, чтобы фиксировать все движения мыши. Когда указатель мыши проходит по именованному компоненту, он ищет имя в пакете, отображает справку, если она доступна, и направляет движение мыши к фактическому компоненту.

Уф. Всего 2 дня бездельничанья. Я наконец-то начинаю привыкать к Java :)

Рад, что смог помочь. Наслаждайтесь Java.

Herman Lintvelt 23.10.2008 01:58

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

Пример:

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

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

Если у вас есть ссылка на component в слушателе, вы также можете использовать e.getComponent() == component, который менее подвержен ошибкам. Я бы тоже подумал об использовании нескольких слушателей.

palacsint 31.03.2015 14:54

Компоненты также могут иметь одно и то же имя. Не путайте приведенный выше тест на равенство компонентов.

Jason 04.11.2017 15:59

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

Вот для чего я использую 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;

        }

    }

ФЕСТ использует имя Компонента для его идентификации в тестовых наборах.

Я искал много ответов, чтобы получить имя и я думаю, что это единственное простое решение

public static void main(String[] args) {
    ActionListener actionListener = new ActionListener() {
        public void actionPerformed(ActionEvent actionEvent) {
            String name = actionEvent.getSource().toString();
            UserReaction(ObjectName.getComponentVariableName(name), "null");
        }
    };
    Button calculate_btn = new Button("Calculate");
    calculate_btn.setName("Calculate");
    calculate_btn.addActionListener(actionListener);
}

private static void UserReaction(String objectName) {
    if (objectName.equals("Calculate")) {
        //do something;         
    }
}static public String getComponentVariableName(String name) {
    String res = (name.substring(name.indexOf("[") + 1));
    res = res.split(",")[0];
    return res;
}

Это вообще не отвечает на вопрос?

AP. 22.03.2017 19:30

Другие вопросы по теме