такое задание у меня:
Обработайте стрелки на клавиатуре так, чтобы кнопка двигалась в сторону соответствующей нажатой клавише.
Обработал кнопки, но кнопка при первом нажатии стрелки отпрыгивает в верхний левый угол окна и далее при нажатии стрелок движется непонятно как и только на один шаг, хотелось бы по всему окну увидеть движение.
public class KeyboardEvent {
public static void main(String[] args) {
JFrame frame = new JFrame("клавиатура");
frame.setBounds(0, 0,600,400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
JButton button = new JButton("777");
button.setBounds(250,150,100,30);
button.setBackground(new Color(152,191,44));
panel.add(button);
panel.setLayout(null);
frame.add(panel);
button.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if(key==37){
int x = -10;
button.setLocation(x--, 0);
x--;
}
if(key==38) {
int y = -10;
button.setLocation(0,y);
y--;
}
if(key==39) {
int x = 10;
button.setLocation(x, 0);
x++;
}
if(key==40) {
int y =10;
button.setLocation(0, y);
y++;
}
}
@Override
public void keyReleased(KeyEvent e) {
}
});
frame.setVisible(true);
}
}
@Override
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if(key==37){
button.setLocation(button.getX() - 10, button.getY());
}
if(key==38) {
button.setLocation(button.getX(), button.getY() - 10);
}
if(key==39) {
button.setLocation(button.getX() + 10, button.getY());
}
if(key==40) {
button.setLocation(button.getX(), button.getY() + 10);
}
}
Проблема в том, что вы задаёте абсолютные значения кнопки всякий раз когда нажимаете на неё, значение x и y всегда перезаписывается одним и тем же значением, вам нужно взять текущую позцию кнопки, а только затем вычислять следующую позицию.
public class KeyboardEvent {
public static void main(String[] args) {
JFrame frame = new JFrame("клавиатура");
frame.setBounds(0, 0, 600, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
JButton button = new JButton("777");
button.setBounds(250, 150, 100, 30);
button.setBackground(new Color(152, 191, 44));
panel.add(button);
panel.setLayout(null);
frame.add(panel);
button.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
int x = button.getX();
int y = button.getY();
switch (key){
case KeyEvent.VK_LEFT:
button.setLocation(x-1, y);
break;
case KeyEvent.VK_UP:
button.setLocation(x, y-1);
break;
case KeyEvent.VK_RIGHT:
button.setLocation(x+1, y);
break;
case KeyEvent.VK_DOWN:
button.setLocation(x, y+1);
break;
default:
//do nothing
}
}
@Override
public void keyReleased(KeyEvent e) {
}
});
frame.setVisible(true);
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Notification уведомление не на всех телефона подтягивает картинкуиспользую
Я хочу повернуть только часть SVGНапример, колеса велосипеда с помощью transform: rotate()
В одном браузере вид чата вот такой: картинка #1Хотя должен быть как на картинке #2