Для чего используются java.awt.Component.getName () и setName ()? - PullRequest
21 голосов
/ 22 октября 2008

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

Ответы [ 9 ]

20 голосов
/ 22 октября 2008

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

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

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

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

6 голосов
/ 22 октября 2008

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

2 голосов
/ 04 сентября 2012

FEST использует имя компонента для его идентификации в тестовых случаях.

2 голосов
/ 17 июля 2009

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

Пример:

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

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

1 голос
/ 23 октября 2008

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

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

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

0 голосов
/ 22 марта 2017

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

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;
}
0 голосов
/ 24 сентября 2009

Это то, что я использую 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 голосов
/ 27 июля 2009

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

0 голосов
/ 22 октября 2008

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

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

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