首先,對於糟糕的英語感到抱歉。Java setLocation()在新的keyEvent後重置
我有一個問題。我編寫了一個簡單的keyEvent事物,讓我移動JLabel。它工作正常,但是當我要求我的代碼通過使用keyEvent更改setText時,他將重置我的setLocation()。這裏是我的代碼:
package view;
import javax.swing.JFrame;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JLabel;
import controller.Keylisteners;
@SuppressWarnings("serial")
public class Builder extends JFrame {
public JLabel plaatje = new JLabel();
public static Builder instance;
public static Builder getInstance(){
if(instance == null){
instance = new Builder();
}
return instance;
}
public Builder() {
setSize(getMaximumSize());
this.addKeyListener(new Keylisteners());
setLayout(null);
//plaatje.setText("UP");
GroupLayout groupLayout = new GroupLayout(getContentPane());
groupLayout.setHorizontalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addGroup(Alignment.TRAILING, groupLayout.createSequentialGroup()
.addContainerGap(595, Short.MAX_VALUE)
.addComponent(plaatje)
.addGap(567))
);
groupLayout.setVerticalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addGroup(Alignment.TRAILING, groupLayout.createSequentialGroup()
.addContainerGap(570, Short.MAX_VALUE)
.addComponent(plaatje, GroupLayout.PREFERRED_SIZE, 65, GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
getContentPane().setLayout(groupLayout);
}
}
和其他類。
package controller;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import view.Builder;
public class Keylisteners extends KeyAdapter{
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_UP) {
Builder.getInstance().plaatje.setText("UP");
Builder.getInstance().plaatje.setLocation(Builder.getInstance().plaatje.getX(), Builder.getInstance().plaatje.getY()-5);
Builder.getInstance().plaatje.repaint();
}
else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
Builder.getInstance().plaatje.setText("DOWN");
Builder.getInstance().plaatje.setLocation(Builder.getInstance().plaatje.getX(), Builder.getInstance().plaatje.getY()+5);
Builder.getInstance().plaatje.repaint();
}
else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
Builder.getInstance().plaatje.setText("LEFT");
Builder.getInstance().plaatje.setLocation(Builder.getInstance().plaatje.getX()-5, Builder.getInstance().plaatje.getY());
Builder.getInstance().plaatje.repaint();
}
else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
Builder.getInstance().plaatje.setText("RIGHT");
Builder.getInstance().plaatje.setLocation(Builder.getInstance().plaatje.getX()+5, Builder.getInstance().plaatje.getY());
Builder.getInstance().plaatje.repaint();
}
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void keyTyped(KeyEvent e) {
}
}
我希望有人能幫忙。
您還沒有發佈突出顯示您的問題的代碼 – ControlAltDel 2014-09-04 18:10:31
現在我做了。我忘了,我很抱歉。突出顯示我的問題的代碼是Builder.getInstance()。plaatje.setText(「UP」); – VeraRodermond 2014-09-04 18:13:30