我是Java的新手,我正在制作一个简单的像素艺术制作者。我复制了一个for循环来绘制圆圈。 我正在做鼠标点击方法。我这样做是为了在单击时打印“左”或“右”。
这是网格系统:http://www.java2s.com/Tutorials/Java/Graphics/Shape/Draw_a_grid_by_drawing_lines_in_Java.htm
这是我使用的MouseEvent系统:
https://github.com/DevonCrawford/A-Pathfinding-Visualization/blob/master/src/Frame.java
唯一的问题是它不打印“左”和“右”。这是我的代码:
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
class Main extends JComponent implements MouseListener {
public static void main(String[] args) {
JFrame window = new JFrame();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setBounds(30, 30, 600, 584);
window.getContentPane().add(new Main());
// window.setResizable(false);
window.setVisible(true);
}
public void paint(Graphics g) {
int rows = 20;
int cols = 20;
int width = getSize().width;
int height = getSize().height;
// draw the rows
int rowHt = height / (rows);
for (int i = 0; i < rows; i++)
g.drawLine(0, i * rowHt, width, i * rowHt);
// draw the columns
int rowWid = width / (cols);
for (int i = 0; i < cols; i++)
g.drawLine(i * rowWid, 0, i * rowWid, height);
}
public void MapCalculations(MouseEvent e) {
// If left mouse button is clicked
if (SwingUtilities.isLeftMouseButton(e)) {
System.out.println("Left");
}
// If right mouse button is clicked
else if (SwingUtilities.isRightMouseButton(e)) {
System.out.println("Right");
}
}
@Override
public void mouseClicked(MouseEvent e) {
MapCalculations(e);
}
@Override
public void mousePressed(MouseEvent e) {}
@Override
public void mouseReleased(MouseEvent e) {}
@Override
public void mouseEntered(MouseEvent e) {}
@Override
public void mouseExited(MouseEvent e) {}
public void mouseDragged(MouseEvent e) {
MapCalculations(e);
}
}
答案 0 :(得分:2)
从不调用鼠标侦听器方法,因为框架不知道何时调用它们。
尝试通过以下主要方法将鼠标侦听器添加到window
对象中:
public static void main(String[] args) {
JFrame window = new JFrame();
Main myMain = new Main();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setBounds(30, 30, 600, 584);
window.getContentPane().add(myMain);
// window.setResizable(false);
window.setVisible(true);
window.addMouseListener(myMain);
}
答案 1 :(得分:0)
永远不会调用该方法,因为您永远不会在任何事物上添加鼠标侦听器。
您可能想要在Main构造函数中
this.addMouseListener(this);
您确实也应该遵守Java命名约定。方法以小写字符开头。而且,您不应该使用paint()
来绘制Swing组件。阅读the tutorial。
答案 2 :(得分:0)
这里有个提示。在内部类中实现mouseListener。
class MyMouseListener extends MouseAdapter {
public void mouseClicked(MouseEvent e) {
MapCalculations(e);
}
public void mouseDragged(MouseEvent e) {
MapCalculations(e);
}
}
然后使用该实例来处理鼠标事件。内部阶级仍然有 访问封闭类的值。
window.addMouseListener(new MyMouseListener());
通过这种方式,您不需要所有这些空方法。另外,您可以使用
满足mouseMotionListener
要求的鼠标监听器类相同,因为MouseAdapter
类对MouseListener
和MouseMotionListener
的两个接口都具有空方法