public class game extends Applet implements KeyListener {
int movex = 10;
int movey = 10;
int x = 50, y = 50;
JTextArea typingArea;
Random rand = new Random();
public void paint(Graphics page){
typingArea = new JTextArea();
typingArea.addKeyListener(this);
//Drawing borders w/ Random colors
page.setColor(new Color(rand.nextFloat(), rand.nextFloat(), rand.nextFloat()));
page.drawRect(0,0,200,200);
//delay
try {
Thread.sleep(1);
} catch (InterruptedException e) {
}
//Draws square
page.drawRect(x, y, 10, 10);
x+=movex;
y+=movey;
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
Dimension d = getSize();
page.setColor(Color.WHITE);
page.fillRect(0, 0, d.width, d.height);
paint(page);
}
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
System.out.println("Key is pressed");
switch( keyCode ) {
case KeyEvent.VK_UP:
movex = 0;
movey = 10;
break;
case KeyEvent.VK_DOWN:
movex = 0;
movey = -10;
break;
case KeyEvent.VK_LEFT:
movex = -10;
movey = 0;
break;
case KeyEvent.VK_RIGHT :
movex = 10;
movey = 0;
break;
}
}
@Override
public void keyReleased(KeyEvent arg0) {
}
@Override
public void keyTyped(KeyEvent e) {
}}
目前我正在制作一个快速的蛇游戏作为编程实践,因为我对Java相对较新,但不是编程。使用Applet我正在绘制一个正方形,并通过递增x,y坐标然后以递归方式调用paint方法将其移动。我使用了错误的对象(JTextArea)还是我的方法存在问题。请快点回答,谢谢。
答案 0 :(得分:0)
让我们看看我们是否可以稍微分解一下......
在paint
方法中,您创建了JTextArea
的新实例,并将自己添加为KeyListener
。
public void paint(Graphics page) {
typingArea = new JTextArea();
typingArea.addKeyListener(this);
这里有三个问题......
paint
方法中创建新组件。当需要重新绘制组件时(并且可以快速连续调用),paint
方法将被调用,paint
应该只绘制组件的当前状态,永远不要更改它KeyListener
JTextArea
添加到显示的组件中,这意味着它永远无法获得键盘焦点,因此永远不会触发KeyEvent
s 然后你打电话......
//delay
try {
Thread.sleep(1);
} catch (InterruptedException e) {
}
//...
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
在您的paint
方法中。这是一个非常糟糕的主意,绘画应该尽可能快地发生,因为直到paint
方法存在,Graphics
上下文的内容可能不会被绘制到屏幕上
最后,你打电话给...
paint(page);
}
这是一个糟糕的主意,因为一旦调用paint
方法,您将永远不会退出StackOverflowException
方法(请参阅上一条评论),最终会得到paint
。
AWT会在您希望重新绘制组件时调用repaint
方法。您可以通过调用KeyListener
来请求更新,但是您应该知道,当重绘管理器决定需要更新某些内容时,将会发生绘画,因此可能不会立即发生。
<h:form>
<h:dataTable value="#{hsinfo.tableContent}" var="o"
styleClass="table"
headerClass="table-header"
rowClasses="table-odd-row,table-even-row">
<h:column>
<f:facet name="header">SBD</f:facet>
<h:outputText value="#{o.sbd}"></h:outputText>
</h:column>
<h:column>
<f:facet name="header">Họ Tên</f:facet>
<h:outputText value = "#{o.ten}"></h:outputText>
</h:column>
<h:column>
<f:facet name="header">Ngày Sinh</f:facet>
<h:outputText value = "#{o.ngaysinh}"></h:outputText>
</h:column>
<h:column>
<f:facet name="header">Giới Tính</f:facet>
<h:outputText value = "#{o.gioitinh}"></h:outputText>
</h:column>
</h:dataTable>
</h:form>