Я новичок в Java, и я пытаюсь сделать программу воздушного хоккея. Чтобы это сделать, я должен сначала проверить, тронут ли молоток и шайба. Я создал программу, которая позволяет мне это делать. Вот код для Совета:
Java Swing - компонент исчезает после того, как мышь вводит JFrame
package airhockey;
import javax.swing.*;
import java.awt.*;
public class Board {
static Mallet m;
public static void main(String[] args)
{
JFrame f = new JFrame("Air Hockey");
JPanel j = new JPanel();
j.setPreferredSize(new Dimension(600,400));
f.add(j);
f.pack();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
f.setResizable(false);
f.setLocationRelativeTo(null);
m = new Mallet();
Puck p = new Puck();
f.add(m);
j.addMouseMotionListener(m);
f.add(p);
p.t.start();
}
}
для Маллет:
package airhockey;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Mallet extends JPanel implements MouseMotionListener {
int x = 300;
int y = 200;
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.RED);
g.fillOval(x-30, y-30, 60, 60);
}
@Override
public void mouseDragged(MouseEvent e) {}
@Override
public void mouseMoved(MouseEvent e)
{
if(e.getX() >= 570) x = 570;
else if(e.getX() <= 30) x = 30;
else x = e.getX();
if(e.getY() >= 370) y = 370;
else if(e.getY() <= 30) y = 30;
else y = e.getY();
repaint();
}
}
и для Puck:
package airhockey;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Puck extends JPanel implements ActionListener{
int x = 300;
int y = 200;
int v = 0;
int h = 0;
Timer t = new Timer(20,this);
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.BLUE);
g.fillOval(x-20, y-20, 40, 40);
}
@Override
public void actionPerformed(ActionEvent e)
{
if(Math.pow((x-Board.m.x)+(y-Board.m.y),2) <= 50) System.out.println("Touching");
}
}
Когда я запускаю программу, Шайба появляется в середина, но Малле нет. Однако, когда мышь входит в Совет, шайба исчезает и появляется Mallet. Тем не менее, консоль говорит «Прикосновение», когда Маллет приближается к месту, где находился Пак. Почему шайба исчезает, когда мышь входит в доску, и как я могу снова открыть Puck?
спасибо. Я создал новый класс под названием Panel, который рисует оба компонента. Теперь программа работает точно так, как я этого хотел. –