【发布时间】:2014-07-02 06:56:21
【问题描述】:
在这里,我想展示一个类的 MouseEvents 在另一个类中的使用...通过创建前一个类的对象...
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.lang.*;
public class MyPagalpanti extends JPanel implements MouseListener
{Point a,b;
boolean drawLin,drawOvl,drawOvl2;
MyPagalpanti(){a=new Point(0,0);b=new Point(0,0);drawLin=false;drawOvl=false,drawOvl2=false;;setSize(300,300);addMouseListener(this);}
public void mouseClicked(MouseEvent m)
{if(!drawOvl){a=new Point(m.getX(),m.getY());drawOvl=true;drawOvl2=false;}
else {b=new Point(m.getX(),m.getY());drawOvl=true;drawOvl2=true;repaint();}//record("clicked",m);}
}
public void mouseEntered(MouseEvent m)
{
}
public void mousePressed(MouseEvent m)
{a=new Point(m.getX(),m.getY());repaint();}
public void mouseReleased(MouseEvent m)
{b=new Point(m.getX(),m.getY());}
public void mouseExited(MouseEvent m)
{}
public void paintComponent(Graphics g)
{if(drawLin){g.setColor(Color.yellow);g.drawLine((int)a.getX(),(int)a.getY(),(int)b.getX(),(int)b.getY());}//d=0;}
else if(drawOvl&&drawOvl2){g.setColor(Color.red);int width=(int)Math.abs(b.getX()-a.getX());
int h=(int)Math.abs(b.getY()-a.getY());
g.drawOval((int)a.getX(),(int)a.getY(),width,h);
}}
}
形成 MyPagalpanti 对象的类:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
//import java.swing.JPanel.*;
public class Mithu extends JFrame// implements MouseListener
{JTextArea jta1,jta2;
Mithu(String title)
{
super(title);
MyPagalpanti p1=new MyPagalpanti();
jta1=new JTextArea();
jta2=new JTextArea();
p1.setOpaque(true);
jta1.setEditable(false);
jta2.setEditable(false);
setForeground(Color.blue);
p1.setPreferredSize(new Dimension(600,600));
p1.setLayout(new GridLayout(3,1,0,0));
getContentPane().add(p1);
pack();
setVisible(true);
}
void record(String s,MouseEvent e)
{jta1.setText(jta1.getText()+"\n"+s+""+e.toString());}
public void mouseClicked(MouseEvent m)
{record("clicked",m);}
public void mouseEntered(MouseEvent m)
{record("entered",m);}
public void mousePressed(MouseEvent m)
{record("pressed",m);}
public void mouseReleased(MouseEvent m)
{ record("released",m);}
public void mouseExited(MouseEvent m)
{record("exited",m);}
public static void main(String args[])
{Mithu m=new Mithu("HI ! Karamvir");
m.setVisible(true);}
}
请不要逐字逐句...我知道我的代码还有许多其他错误...因为我仍在努力...但是对于那些说“鼠标事件将只交付给从它注册到 " 的组件中的 MouseListener ,我猜你说得对,但如果我们仔细观察,我只使用了这个概念......在这段代码中......
【问题讨论】:
-
你没有很好地测试这个。
MouseListener永远不会添加到MouseEvtEx2,因此永远不会调用record -
对代码块使用一致且符合逻辑的缩进。代码的缩进是为了帮助人们理解程序流程。
-
yyea..但我已经从 MyPanel 类中导入了它!我在那里添加了 MouseListener。
-
当你想买房子时,你的邻居赚了很多钱这一事实无关紧要。
MyPanel类实现 MouseListener 的事实不会神奇地导致MouseEvtEx2中的 mouseClicked 方法被调用:它们是两个不同的对象。 -
当然可以,但是我在 MouseEvtEx2 中创建了 MyPanel 类的对象!因此,该方法应该被导入。它们在同一个包中。所以,我直接在 MouseEvtEx2 中创建了一个 MyPanel 的对象
标签: java swing jtextarea mouselistener