Как назначить разные ключи для действия SWING? [Дубликат]

Мое решение очищает ненужные значения null

DECLARE @cols AS NVARCHAR(MAX), @maxcols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX) select @cols = STUFF((SELECT ',' + QUOTENAME(CodigoFormaPago) from PO_FormasPago order by CodigoFormaPago FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') select @maxcols = STUFF((SELECT ',MAX(' + QUOTENAME(CodigoFormaPago) + ') as ' + QUOTENAME(CodigoFormaPago) from PO_FormasPago order by CodigoFormaPago FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') set @query = 'SELECT CodigoProducto, DenominacionProducto, ' + @maxcols + ' FROM ( SELECT CodigoProducto, DenominacionProducto, ' + @cols + ' from ( SELECT p.CodigoProducto as CodigoProducto, p.DenominacionProducto as DenominacionProducto, fpp.CantidadCuotas as CantidadCuotas, fpp.IdFormaPago as IdFormaPago, fp.CodigoFormaPago as CodigoFormaPago FROM PR_Producto p LEFT JOIN PR_FormasPagoProducto fpp ON fpp.IdProducto = p.IdProducto LEFT JOIN PO_FormasPago fp ON fpp.IdFormaPago = fp.IdFormaPago ) xp pivot ( MAX(CantidadCuotas) for CodigoFormaPago in (' + @cols + ') ) p ) xx GROUP BY CodigoProducto, DenominacionProducto' t @query; execute(@query);
3
задан Andrew Thompson 1 January 2014 в 23:20
поделиться

2 ответа

KeyListener - это API с более низким уровнем, который требует, чтобы компонент, который он зарегистрировал, был сфокусирован и имел фокус клавиатуры. Это может вызвать проблемы, если у вас есть другие компоненты в вашей игре, которые могут захватить фокус клавиатуры, например.

KeyListener, как правило, сложнее поддерживать, расширять или изменять, как обычно, все ключевые события

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

API привязок клавиш был разработан для предоставления повторно используемых Action s, которые могут использоваться во множестве различных частей Swing API, в то время как это упрощает разработку настольных приложений, это также облегчает разработку игр ...

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

Например ...

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

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

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

8
ответ дан MadProgrammer 24 August 2018 в 01:25
поделиться

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

Существует много доступных библиотек, которые имеют свои преимущества / недостатки. Связывание клавиш должно быть хорошо, хотя для 2D-игры. Однако учтите, что использование Java API не рекомендуется для разработки игр. Если вы когда-либо хотите создавать 3D-игры или контент-богатые 2D-игры, гораздо лучше использовать OpenGL. Попробуйте LWJGL или JOGL (обычно LWJGL), или вы можете использовать игровой движок, такой как Slick2D или LibGDX.

0
ответ дан Troubleshoot 24 August 2018 в 01:25
поделиться
Другие вопросы по тегам:

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