Пожалуйста, мне нужна помощь с этим кодом, над которым я работаю - я знаю, что это что-то маленькое, но я не могу найти, что с ним не так. Я хочу переместить красный прямоугольник вправо и влево, для которого я создал отдельный метод, а затем вызываю его в методе keyPressed
, но он не работает.Движение клавиатуры Java Graphics
import java.awt.Color;
import java.awt.Dialog;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JPanel;
import javax.swing.Timer;
public class PanelGraph extends JPanel implements KeyListener,ActionListener {
int BARX=100,BARY=230,Width=60,Hight=10;
int BARVELX=0,BARVELY=0;
int BX=100,BY=100,BWidth=20,BHight=20;
int VELX=2,VELY=2;
public Timer t= new Timer(20,this);
//@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.red);
g.fillRect(BARX, BARY, Width, Hight);
g.setColor(Color.black);
g.fillOval(BX, BY, BWidth, BHight);
t.start();
}
public void balMovement() {
BX+=VELX;
BY+=VELY;
//Checking for X border collution
if(BX<0||BX>260){
VELX=-VELX;
}
//Checking for Y border collution
if(BY<0||BY>240){
VELY=-VELY;
}
repaint();
}
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode()==KeyEvent.VK_RIGHT){
rightKey();
}
if(e.getKeyCode()==KeyEvent.VK_DOWN){
downKey();
}
repaint();
}
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void actionPerformed(ActionEvent e) {
balMovement();
}
//Moving right methods
public void rightKey(){
BARX+=BARVELX;
BARY=0;
}
//Moving left method
public void downKey(){
BARX-=BARVELX;
BARY=0;
}
}
Основные
import javax.swing.JFrame;
public class MiniTeniis {
public JFrame frame;
public MiniTeniis(){
PanelGraph panelG= new PanelGraph();
frame= new JFrame("Mini Tennis");
frame.setSize(300,300);
frame.setVisible(true);
frame.add(panelG);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
MiniTeniis M= new MiniTeniis();
PanelGraph P = new PanelGraph();
P.setFocusable(true);
P.setFocusTraversalKeysEnabled(false);
}
}
См [Motion Использование клавиатуры] (https://tips4java.wordpress.com/2013/06/09/motion-using-the-keyboard/) для примера с ключом Наручники. Кроме того, имена переменных не должны начинаться с символа верхнего регистра, а имена переменных с одной буквой ужасны. Имя переменной должно быть описательным! Наконец, ваш код создает два объекта PanelGraph. Второй никогда не используется, поэтому избавитесь от него. – camickr
Вы ссылаетесь на тот, который находится в основном методе? – user3500147