你可以这样试试 public class A{ private Vector aListeners = new Vector(); private int value; public int getValue(){ return value; } public void setValue(int newValue){ if(value!=newValue){ value = newValue; AEvent evt= new AEvent(this,value); //如果值改变的话,就触发事件 fireAEvent(evt); } } public synchronized void addAListener(AListener a){ aListeners.addElement(a); } public synchronized void removeAListener(Alistener a){ aListeners.removeElement(a); } public void fireAEvent(AEvent evt){ Vector currentListeners = null; synchronized(this){ currentListeners = (Vector)aListeners.clone(); } for(int i =0;i<currentListeners.size();i++){ AListener listener = (AListener)currentListeners.elementAt(i); listener.performed(evt); } } } //定义接口,当事件触发时调用 public interface AListener extends java.util.EventListener{ public abstract void performed(AEvent e); } //定义事件 public class AEvent extends EventObject{ private int value; public AEvent(Object source){ this(source,null); } public AEvent(Object source,int newValue){ super(source); value = newValue; } } class B{ public B(){ A a = new A(); a.addAListener(new AListener(){ public performed(AEvent e){ //要处理的 } }); }
我在一个类中定义一个函数myEvent
然后声明 Event myEvent这样myEvent就成了一个事件了当我产生一个类的实例时,他就有myEvent这个事件.我的意思就是想在java造这样一个时间
public class A{
private Vector aListeners = new Vector();
private int value;
public int getValue(){
return value;
}
public void setValue(int newValue){
if(value!=newValue){
value = newValue;
AEvent evt= new AEvent(this,value);
//如果值改变的话,就触发事件
fireAEvent(evt);
}
}
public synchronized void addAListener(AListener a){
aListeners.addElement(a);
}
public synchronized void removeAListener(Alistener a){
aListeners.removeElement(a);
}
public void fireAEvent(AEvent evt){
Vector currentListeners = null;
synchronized(this){
currentListeners = (Vector)aListeners.clone();
}
for(int i =0;i<currentListeners.size();i++){
AListener listener = (AListener)currentListeners.elementAt(i);
listener.performed(evt);
}
}
}
//定义接口,当事件触发时调用
public interface AListener extends java.util.EventListener{
public abstract void performed(AEvent e);
}
//定义事件
public class AEvent extends EventObject{
private int value;
public AEvent(Object source){
this(source,null);
}
public AEvent(Object source,int newValue){
super(source);
value = newValue;
}
}
class B{
public B(){
A a = new A();
a.addAListener(new AListener(){
public performed(AEvent e){
//要处理的
}
});
}
}
你可以试试了
我只是大概的写了一下,你再完善一下就可以了
大体思想应该没什么错误
就是继承EventObject,和EventListener,然后定义事件触发条件就可以了
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
public class keytest extends JFrame implements KeyListener
{
private JTextField jt=new JTextField();
public keytest()
{
Container ctp=getContentPane();
ctp.setLayout(null);
ctp.add(jt);
jt.setBounds(20,20,100,30);
setTitle("keytest");
setSize(300,300);
jt.addKeyListener(this);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
public void keyPressed(KeyEvent evt)
{
int keyCode =evt.getKeyCode();
//jt.setText("");
if (keyCode==KeyEvent.VK_RIGHT && evt.isShiftDown())
{jt.setText("Shit+->");}
if (keyCode==KeyEvent.VK_ENTER) jt.setText("");
//else {jt.setText(""); }
}
public void keyTyped(KeyEvent evt){}
public void keyReleased(KeyEvent evt)
{
int keyCode =evt.getKeyCode();
jt.setText("");
if (keyCode==KeyEvent.VK_RIGHT && evt.isShiftDown())
jt.setText("Shit+->");
//else
}
public static void main (String args[])
{
JFrame test =new keytest();
test.setVisible(true);
}
}