我试图为学校编写游戏代码,我必须使用MouseListener。我正在使用MouseListener作为主菜单。我想要选择" Spelregels" (转换为规则)来创建和显示包含游戏规则的新JFrame。
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
public class MouseInput implements MouseListener {
Main mainMenu = new Main();
@Override
public void mouseClicked(MouseEvent e) {
int mx = e.getX();
int my = e.getY();
// public Rectangle startNieuwSpelButton = new Rectangle(100, 275, 250, 50);
// public Rectangle hervatSpelButton = new Rectangle(100, 340, 250, 50);
// public Rectangle spelregelsButton = new Rectangle(100, 405, 250, 50);
// public Rectangle highscoresButton = new Rectangle(100, 470, 250, 50);
// Start Nieuw Spel Button
if(mx >= 100 && mx <= 350) {
if (my >= 275 && my <= 325) {
System.out.println("Je hebt op de startNieuwSpelButton geklikt.");
}
}
// Hervat Spel Button
if(mx >= 100 && mx <= 350) {
if (my >= 340 && my <= 390) {
System.out.println("Je hebt op de hervatSpelButton geklikt.");
}
}
// Spelregels Button
if(mx >= 100 && mx <= 350) {
if (my >= 405 && my <= 455) {
JFrame spelregelFrame = new JFrame("Lunar Lockout Spelregels");
spelregelFrame.setSize(450, 650);
spelregelFrame.setLocation(800, 100);
spelregelFrame.setVisible(true);
}
}
// Highscore Button
if(mx >= 100 && mx <= 350) {
if (my >= 470 && my <= 520) {
System.out.println("Je hebt op de highscoreButton geklikt.");
}
}
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
}
我正在使用的代码。我想知道为什么它多次显示JFrame。像这样:http://puu.sh/7UuJb.jpg。
提前致谢。
最诚挚的问候。
答案 0 :(得分:0)
不是在paintComponent
中添加鼠标侦听器,而是在需要重新绘制组件时调用它,您应该在构造函数中添加它。这样你的面板只会有一个鼠标监听器。
目前,每次重新粉饰时都会添加一个新的,所以他们会不断积累。
所以,基本上:
public class HoofdMenu extends JPanel {
// ... member vars
public HoofdMenu() {
this.addMouseListener(new MouseInput());
}
@Override
public void paintComponent(Graphics g) {
// ... don't add listener in here
}