Корректный способ использовать Действия для создания меню, панелей инструментов и других компонентов в Java

Как сказали бы британцы: «Горе!»

TL; DR

Попробуйте:

using Microsoft.Azure.Management.ResourceManager.Fluent;
...

var rm = ResourceManager.                    
                .Configure()
                .WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic)
                .Authenticate(credentials)
                .WithDefaultSubscription();

var resources= rm.GenericResources.List();

foreach(IGenericResource res in resources)
{
    ....
}

TL; DR 2

Некоторые комментарии указывают на метод расширения ResourceOperationsExtensions.List . Для этого требуется экземпляр IResourceOpearations. Это доступно через IResourceManagementClient.Resources . Это доступно через свойство ResourceManager.Inner :

var rmOps=rm.Inner.Resources;
var resources = rmOps.List(someODataQuery);

Длинная версия

Управление Azure работает путем предоставления интерфейсов REST. В конце концов, и Azure SDK, и командлеты Powershell будут вызывать этот интерфейс REST. Вы можете использовать Fiddler или другой прокси-сервер отладки для захвата и повторного использования

Командлеты Powershell реализованы поверх SDK, что означает, что вы можете просматривать сам исходный код . [1134 ]

Командлет использует метод ListResources класса класса ResourceManagerSdkClient с запросом OData, созданным из его параметров:

result = this.ResourceManagerSdkClient.ListResources(odataQuery);

К сожалению, это не помогает командлеты используют свои собственные низкоуровневые абстракции, в то время как библиотеки Azure RM используют различные абстракции и интерфейсы. ListResources говорит нам, что нам нужно запросить GenericResource.

Репозиторий библиотек Azure Resource Manager размещен на Github. Документация не показывает, как добраться до ResourceManager . Поиск в самом репо показывает, как ResourceManager используется в тестах .

ResourceManager.GenericResources предоставляет доступ к тем же универсальным ресурсам, которые использует команда Powershell. Тип этого свойства - IGenericResources , который, в свою очередь, реализует ISupportsListing , который дает нам доступ к List

. интерфейсы явно реализованы. Код может нуждаться в явном приведении.

IGenericResources также реализует ISupportsListingByResourceGroup и ISupportsListingInResourceGroupByTag, которые можно использовать для поиска по группам ресурсов и тегам.

Поиск в Google по ResourceManager.GenericResources или GenericResources.List() и т. Д. Не дает соответствующих результатов. Термины слишком ... общие.

1142 Я думаю, что сейчас сделаю перерыв. [Тысяча сто сорок два]

8
задан David Koelle 23 January 2009 в 16:42
поделиться

6 ответов

Приложения, которые я разработал, который должен использовать те же самые действия через меню, панели инструментов и другие кнопки, были сделаны с помощью Среды разработки приложения Swing.

Среда разработки приложения Swing

Эта платформа позволит Вам иметь файл ресурсов, где можно определить весь текст меню, подсказки и ЗНАЧКИ. Я думаю, что значки являются ключом, Вы не должны загружать их сами. Кроме того, если у Вас есть какие-либо действия, которые необходимо позволить/запретить Вам, может переопределить метод для управления его состоянием.

Веб-сайт стоит чтения.

4
ответ дан 5 December 2019 в 23:17
поделиться

Можно сгруппировать весь abstractAction использование специализированной Карты javax.swing.actionmap. См. http://java.sun.com/javase/6/docs/api/javax/swing/ActionMap.html

Кроме того, каждый JComponent имеет внутренний actionMap (getActionMap ()).

class MyComponent
extends JPanel
{
public static final String ACTION_NAME1="my.action.1";

public MyComponent()
 {
 AbstractAction action= new AbstractAction() { ... }
 getActionMap().put(ACTION_NAME1,action);
...

 menu.add(getActionMap().get(ACTION_NAME1));
 }

}

Надежда это помогает

1
ответ дан 5 December 2019 в 23:17
поделиться

Action плохая абстракция - ActionListener сваренный бедному человеку Map.

Конечно, не присваивайте им a static поскольку они изменяемы и также нуждаются в некотором контексте для работы полезно.

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

0
ответ дан 5 December 2019 в 23:17
поделиться

Также посмотрите этот вопрос, который является в значительной степени тем же как, что Вы спрашиваете.

0
ответ дан 5 December 2019 в 23:17
поделиться
  1. Создайте основное действие для своего приложения; это поможет Вам ОЧЕНЬ позже
  2. Сделайте действия по созданию, как Вы имеете в своем коде, вместо этого одобряете подклассы своего основного действия

Для организации их это будет зависеть от того, что Вы делаете с ними, и у Вас могут быть некоторые действия, организовал один путь, и другие создали другой путь. Это будет все зависеть.

То, что Вы хотите, должно иметь последовательный способ определить местоположение/создать действия в Вашем коде.

В зависимости от Вашего UI Вы, возможно, должны дифференцироваться между "статическими" действиями (т.е. материал, это всегда доступно в Вашем приложении, таково как система меню), и динамические действия, которые создаются только на определенных экранах или в определенных местоположениях.

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

0
ответ дан 5 December 2019 в 23:17
поделиться

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

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

---исходное сообщение

В первую очередь, не забудьте разделять свой код от данных. Это означает, что Вы никогда не должны вводить:

new Menu("File...");

Строка "Файл..." является данными. Если Вы начнете думать этот путь, то Вы найдете, что Ваш вопрос отвечает на себя.

Сначала необходимо создать некоторые данные. Необходимо получить "Файл..." и "Сохранить" в меню. Я обычно начинаюсь с массивом строк (который можно легко переместить в файл),

new String[]{"File...","+Save","Load"...} 

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

Это - просто глупая конвенция, изобретите свое собственное, если Вам не нравится она.

Следующий шаг обязывает это кодировать для выполнения. У Вас могли быть они все, называют тот же метод, но что боль в заднице (Гигантский оператор переключения). Одна возможность состоит в том, чтобы использовать отражение для привязки имени метода, в то время как Вы читаете в данных. Вот одно решение (снова, оно не могло бы соответствовать Вашим вкусам),

new String[]{"File...[fileMenu]","+Save[saveMenu]","Load[loadMenu]"...} 

Затем Вы анализируете вещь в квадратных скобках, отражающим образом сцепляете ее до метода в Вашем текущем классе, и Вы установлены.

Существует искушение, которое я ВСЕГДА имею в этой точке, и я учился бороться с ним, потому что это НИКОГДА не удается. Искушение состоит в том, чтобы использовать первый набор данных ("Файл...") и управлять им, чтобы соответствовать некоторому шаблону и auomatically связать с Вашим кодом (в этом случае, для удаления всех неальфа-символов, сделайте первый нижний регистр буквы и добавьте "Меню" для получения корректного имени метода). Не стесняйтесь пробовать это, это очень привлекательно и кажется гладким, но быть готов отказаться от него, когда это не удовлетворяет некоторые потребности (такие как два пункта меню с тем же самым именем в различных подменю).

Иначе был бы то, если Ваш язык поддерживает закрытия, то Вы могли на самом деле создать имя файла и закрытие в том же месте..

Так или иначе, после того как Вы начинаете кодировать как это, Вы найдете, что ВСЯ Ваша конструкция меню находится в единственных 10 методах строки, и можно изменить ее для удовлетворения потребностям. У меня был случай, где я должен был изменить ряд меню на иерархию кнопки, и я сделал это за 2 минуты.

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

Это действительно не твердый код, должен взять как час, или два затем Вы никогда не должны писать новое Меню ("... снова. Доверяйте мне, этот вид инструментов примерно всегда стоит того.

править:

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

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

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

Хм, я упоминал, что, если Вы способны извлекать свои данные как это, i18n фактически свободен?

Я предлагаю, чтобы Вы просто дали ему попытку когда-то и видели то, что Вы думаете. Встраивание управления в строках является ненужным, если оно делает Вас неудобными. Я склонен использовать строку/объектные массивы просто, потому что их действительно легко ввести, находятся все еще в файле, в то время как Вы кодируете и тривиальны для воплощения позже, но если Вам нравятся YML или XML или файлы свойств, используйте то, что Вы довольны - просто абстрагируют Ваши данные из Вашего кода!

0
ответ дан 5 December 2019 в 23:17
поделиться
Другие вопросы по тегам:

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