Что такое java.awt.Component.getName()
? Кажется, что в приложениях, которые я строю с помощью NetBeans, всегда null
. Я подумываю о сохранении текста справки для каждого компонента в нем - я не хочу использовать всплывающую подсказку, у меня есть еще одна панель, где я покажу текст справки.
Что такое java.awt.Component.getName() и setName()?
Ответ 1
Component.setName(..) используется в JDK, главным образом, классами проверки и проверки, чтобы установить ID-подобные строки для каждого компонента, например. BasicOptionPaneUI может называть его компонентом кнопки, чтобы установить его имя в "OptionPane.button".
Метод getName() используется в методах toString() при настройке имен дочерних компонентов внутри Composite/parent Component и в AWT и Swing. Я подозреваю, что метод getName() также используется некоторыми платформами тестирования AWT/Swing.
Итак, если вы не зависите от какого-либо из перечисленных выше способов использования getName(), вы можете попробовать использовать его для своих справочных сообщений, хотя я бы не рекомендовал его.
Возможно, вам стоит пересмотреть свой дизайн? Используйте имя для поиска в хэш-карте, которая загружает текст справки из пакета ресурсов?
Ответ 2
Я не видел, чтобы оно использовалось для чего-либо с помощью рамки. Его полезно, если у вас есть компоненты, передаваемые методу, поэтому вы можете попросить их имя решить, как с ними обращаться. Кроме того, многие интерфейсы тестирования UI используют это, чтобы вы могли ссылаться на компоненты по имени в тестовых сценариях. Я не вижу причин, по которым вы не можете использовать его для справки.
Ответ 3
Метод component.getName()
в основном используется с слушателями. Если вы задаете имя компонента (component.setName(name)
), вы можете вызвать этот конкретный компонент из метода Listener
.
Пример:
public void someMethodOfsomeListener(SomeEvent e){
if (e.getComponent().getName().equals(component.getName())
//do stuff...
}
Помните, что вам нужно явно указать имя компонента, иначе оно вернет null
.
Ответ 4
FEST использует имя компонента для его идентификации в тестовых файлах.
Ответ 5
Ответ Herman Lintvelt оказался верным для моего приложения.
Я создал набор ресурсов с именем HelpText.properties. Он содержит пары name = value. Я устанавливаюName() d для каждого из моих Компонентов с именем "name" из пары name = value. Затем я использовал рамку getGlassPane() для захвата всех движений мыши. Когда мышь работает над именованным компонентом, она просматривает имя в пакете, отображает справку, если она доступна, и перенаправляет движение мыши к фактическому компоненту.
- Посмотрите здесь о том, как использовать стеклянную панель.
- Jan Newmarch веб-страница по использованию пакетов ресурсов была очень полезной.
- Kevin Riff ответ помог мне разобраться, как найти свой ресурсный пакет.
Уф. Только 2 дня стоит вокруг. Я, наконец, начинаю привыкать к Java:)
Ответ 6
Кроме того, поскольку я думаю, что java.awt.Component является тяжеловесным объектом в X, такие программы, как xwininfo и xwd, могут указывать его по имени.
Я просто попробовал это с помощью JFrame, а setName не установил имя окна, окно было названо строкой, переданной в конструкторе. Но у меня нет какого-либо awt-only-кода для тестирования, поэтому я мог ошибаться в том, что я написал выше.
Ответ 7
Я использую его для обработки слушателей в одном отдельном классе. Я получаю в качестве параметра компонент, который содержит объект object.addListener не как контейнер, а как класс, содержащий этот объект. Спасибо Vivavinyl за подсказку с именем. Это было полезно и работало.
Ответ 8
Это то, что я использую 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;
}
}
Ответ 9
Я искал много ответов для получения имени и я думаю, что это единственное удобное решение
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;
}