我不确定为什么我的代码不起作用但它让我发疯。
这是我的班级,应该绘制按钮并创建要绘制的区域:
第二组代码是我需要制作4个画布的驱动程序,当我点击两次鼠标时,它会在两次点击之间画一条线然后重新绘制,如果我再次尝试再点击画布。
我收到以下错误: 错误:方法声明无效;需要返回类型 addMouseListener将(本); ^ 错误:非法启动类型 addMouseListener将(本); ^
public class Scribble extends JPanel implements MouseListener
{
addMouseListener(this);
int x, x1, y, y1;
boolean flag = false;
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawLine(x, y, x1, y1);
}
public void mouseReleased(MouseEvent e)
{
if (!flag){
x = e.getX();
y = e.getY();
flag = true;
}
else{
x1 = e.getX();
y1 = e.getY();
flag = false;
repaint();
}
}
public void mouseExited(MouseEvent e){}
public void mouseClicked(MouseEvent e){}
public void mousePressed(MouseEvent e){}
public void mouseMoved(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
}
public class Lab8Draw extends JFrame{
public Lab8Draw(){
Color c = new Color(100, 10, 200);
setTitle("Lab 8 - Application #1");
setLayout(new GridLayout(2,2));
Scribble s = new Scribble();
s.setBackground(Color.WHITE);
add(s);
Scribble s1 = new Scribble();
s1.setBackground(Color.RED);
add(s1);
Scribble s2 = new Scribble();
s2.setBackground(c);
add(s2);
Scribble s3 = new Scribble();
s.setBackground(Color.BLUE);
add(s3);
}
public static void main (String[] args){
Lab8Draw frame = new Lab8Draw();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800, 800);
frame.setVisible(true);
}
}
答案 0 :(得分:1)
您必须实施MouseListener
public class Scribble extends JPanel implements MouseListener
并注册
Scribble s = new Scribble();
s.addMouseListener(s);
Java tutorials为撰写MouseListener
提供了有用的指南。
或者,您可以定义一个扩展MouseInputAdapter的内部类,因为它已经有MouseListener
方法的空实现。
答案 1 :(得分:1)
第一步是让你的Scribble类扩展JPanel。您还需要让您的画布调用addMouseListener方法。现在,你真正拥有的是JFrame上的4幅画布。您不会将MouseListener添加到该类中的面板。您将侦听器添加到Scribble类的实例。另外,在驱动程序类的中实现MouseListener 。你不应该在JPanel类中这样做。
答案 2 :(得分:0)
首先,类Scribble
必须实现MouseListener
并通过addMouseListener
()方法分配事件处理程序以捕获鼠标事件。 MouseListener接口具有以下必须覆盖的方法。
class Scribble extends JPanel implements MouseListener
{
int x, x1, y, y1;
boolean flag = false;
public Scribble(){
addMouseListener(this);
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawLine(x, y, x1, y1);
}
public void mouseReleased(MouseEvent e){
if (!flag){
x = e.getX();
y = e.getY();
flag = true;
}
else{
x1 = e.getX();
y1 = e.getY();
flag = false;
repaint();
}
}
public void mouseExited(MouseEvent e){}
public void mouseClicked(MouseEvent e){}
public void mousePressed(MouseEvent e){}
public void mouseMoved(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
}
答案 3 :(得分:0)
您是否将自己添加为MouseListener? E.g。
this.addMouseListener(本);
答案 4 :(得分:0)
我认为这是因为当在JFrame上绘制JPanels“Scribble”时,坐标都是0,因为它们没有被初始化。所以你有一条从P(0/0)到P(0/0)的线。
检查您的MouseListener是否正常工作....您在哪里注册?你不需要实现MouseListener吗?祝你好运。