所以我遇到一个问题,我无法退出绘图的for循环,我相信是因为MouseListener不在for循环中工作,我想知道是否有一种方法可以在运行中添加Mouse侦听器for循环,因此我可以检查何时释放鼠标。 这是一个学校项目,对于Java我是新手,所以最好做一个简单的解释。谢谢
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.MouseInfo;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.ImageObserver;
import java.text.AttributedCharacterIterator;
import java.util.concurrent.TimeUnit;
import javax.swing.*;
import javax.swing.plaf.basic.BasicTabbedPaneUI.MouseHandler;
public class main extends JPanel implements MouseListener {
int x,y;
static int time = 0;
static boolean mousePressed;
static JFrame f = new JFrame("TEST");
static JPanel p = new JPanel();
static JLabel l = new JLabel("Hello");
public main() {
p.addMouseListener(this);
addMouseListener(this);
}
public void paint(Graphics g) {
//g.drawLine(10, 10, 200, 300);
}
public static void main(String[] args) {
p.add(l);
f.add(p);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(400,400);
f.getContentPane().add(new main());
f.setResizable(false);
f.setVisible(true);
}
@Override
public void mouseClicked(MouseEvent e) {
x=(int) MouseInfo.getPointerInfo().getLocation().getX();
y=(int) MouseInfo.getPointerInfo().getLocation().getY()-46;
if(mousePressed = true) {
Graphics g = getGraphics();
g.drawLine(x,y,x,y);
try {
TimeUnit.MILLISECONDS.sleep(1);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
mouseClicked(e);
mousePressed = false;
}
else
mousePressed=true;
}
@Override
public void mousePressed(MouseEvent e) {
mousePressed=true;
mouseClicked(e);
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
mousePressed=false;
System.out.println("TEST");
mouseClicked(e);
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseDragged(MouseEvent e) {
}
}
答案 0 :(得分:1)
... MouseListener在for循环中不起作用
for
循环。mouseClicked(e);
中的mouseClicked
正在无限地调用自己。repaint()
。paint()
,则应该绘制整个窗口,而不仅仅是绘制要添加到窗口的内容。或委托给父类的paint()
。例如:
public class Test extends JFrame implements MouseListener {
int x, y;
boolean mousePressed;
public static void main(String[] args) {
new Test().setVisible(true);
}
public Test() {
super("Test");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 400);
addMouseListener(this);
}
public void paint(Graphics g) {
super.paint(g); // paints the entire window normally
if (mousePressed) { // additional painting
g.drawLine(x - 20, y, x + 20, y);
g.drawLine(x, y - 20, x, y + 20);
}
}
@Override
public void mousePressed(MouseEvent e) {
x = e.getX();
y = e.getY();
mousePressed = true;
repaint();
}
@Override
public void mouseReleased(MouseEvent e) {
mousePressed = false;
repaint();
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mouseClicked(MouseEvent e) {
}
}