所以我试图在JFrame上编程snake并在JPanel上做所有图形化的东西(移动'蛇',随机食物生成等)。我正处于起步阶段,所以我现在要做的就是使用箭头键在我的框架上移动一个黑色方块。 Panel类中的while循环不会因Snake类中的按键而中断,所以有没有办法用我所有其他代码从同一个类编辑JPanel图形?
这是所有代码。底部的我的Panel类遵循我在此处找到的模板。
with
inputs ( str ) as (
select 'Lorem ipsum dolor sit amet, consectetur adipiscing elit' from dual union all
select 'Lorem ipsumdolor sit amet, consectetur adipiscing elit' from dual union all
select 'Loremipsumdolorsitametconsedtetur' from dual union all
select 'Lorem ipsumdolorsit amet, consectetur etc.' from dual union all
select 'Lorem ipsum dolorsitamet, consectetur adipiscing elit' from dual union all
select 'abcdef ghijk lmno' from dual
),
prep ( str, flag, fragment ) as (
select str,
case when length(str) <= 20 or substr(str, 21, 1) = ' ' then 1 end,
substr(str, 1, 20)
from inputs
)
select str,
case flag when 1 then fragment
else substr(fragment, 1, instr(fragment, ' ', -1) - 1) end
as new_str
from prep;
STR NEW_STR
------------------------------------------------------- --------------------
Lorem ipsum dolor sit amet, consectetur adipiscing elit Lorem ipsum dolor
Lorem ipsumdolor sit amet, consectetur adipiscing elit Lorem ipsumdolor sit
Loremipsumdolorsitametconsedtetur
Lorem ipsumdolorsit amet, consectetur etc. Lorem ipsumdolorsit
Lorem ipsum dolorsitamet, consectetur adipiscing elit Lorem ipsum
abcdef ghijk lmno abcdef ghijk lmno
答案 0 :(得分:2)
绘画方法中永远不应该有while(true)
循环。这只会导致无限循环,您的GUI将无法响应事件。
相反,你需要为你的蛇类添加方法来移动蛇。因此,当按下其中一个箭头键时,您将更新蛇的起始位置。然后该方法将调用repaint(),当Swing调用paintComponent()方法时,snake将重绘自身。
所以你的绘画代码应该覆盖paintComponent()
而不是paint(),你应该调用super.paintComponent(g)
作为方法中的第一个语句。
不要打电话给你的自定义班级&#34; Panel&#34;,有一个名称为AWT的班级。使您的班级名称更具描述性。