import javax.swing.*;
import java.awt.event.*;
import java.awt.event.KeyListener;
import java.util.EventListener;
public class chap4_4 implements KeyListener{ public JButton buttonadd;
public JFrame main_frame;
JPanel main_panel;
public JTextField textfield;
JLabel label;
public JComboBox combobox;
MyMouseListener mymouselistener;
public chap4_4()
{
main_frame=new JFrame("chap4_4");
main_panel=new JPanel();
main_frame.add(main_panel);
label=new JLabel("输入");
textfield=new JTextField(10);
combobox=new JComboBox();
buttonadd=new JButton("添加");

mymouselistener=new MyMouseListener(this);//和下面有我注释的有什么关联
buttonadd.addMouseListener(mymouselistener);
combobox.addItemListener(new MyItemListener(this));
main_panel.add(label);
main_panel.add(textfield);
main_panel.add(combobox);
main_panel.add(buttonadd);
main_frame.setSize(300,200);
main_frame.setVisible(true);

}
public static void main(String[] args) {

chap4_4 a=new chap4_4();

}
public void keyTyped(KeyEvent e) { }
public void keyPressed(KeyEvent e) { }
public void keyReleased(KeyEvent e) {
}
}class MyMouseListener implements MouseListener
{
chap4_4 obj;
public MyMouseListener(chap4_4 obj)
{
this.obj=obj;//请问这里直接都参数传个了对象有什么作用和下面程序代码有什么关联吗(除了mymouselistener=new MyMouseListener(this);这样的有关联外)
}
public void mouseClicked(MouseEvent e) 
{
String a=new String();
a=obj.textfield.getText();//这里的obj是不是类C的对象
obj.combobox.addItem(a);//这里的obj是不是类C的对象
}
public void mouseEntered(MouseEvent e) //这里的(MouseEvent e)参数是什么,是不是可以省略,或者与上面MouseListener申请有关系呢
{
JOptionPane.showMessageDialog(null,"鼠标进入","",1);
}
public void mouseExited(MouseEvent e)
{
JOptionPane.showMessageDialog(null,"鼠标移出","",1);
}
public void mousePressed(MouseEvent e) 
{
}
public void mouseReleased(MouseEvent e) 
{
}
}
class MyItemListener implements ItemListener
{
chap4_4 obj;
public MyItemListener(chap4_4 obj)
{
this.obj=obj;
}
public void itemStateChanged(ItemEvent e) 
{
String a=new String();
a=(String )obj.combobox.getSelectedItem();
obj.textfield.setText(a);
}
}问的问题有点肤浅 希望高手详细解答,非常感谢!!!!!!^_^

解决方案 »

  1.   

    这主要是 awt中的事件模型,也是observer模式,每一个组件都有一个相应的监听器,如果监听到事件则进行相应的处理。像下面的语句就是给button添加一个鼠标单击事件。
    mymouselistener=new MyMouseListener(this);
    buttonadd.addMouseListener(mymouselistener);
    ---------------
    public MyMouseListener(chap4_4 obj)
    {
    this.obj=obj;//请问这里直接都参数传个了对象有什么作用和下面程序代码有什么关联吗(除了mymouselistener=new MyMouseListener(this);这样的有关联外)
    }这里主要是通过MyMouseListener的构造函数把chap4_4对象传入进来,这样在类的其他方法中就可以使用chap4_4中的数据和方法了。
    ---------------
    public void mouseEntered(MouseEvent e) //这里的(MouseEvent e)参数是什么,是不是可以省略?
    mouseEntered(MouseEvent e)是MouseListener接口中的方法,既然继承的是接口,那么必须要完整的实现这个方法,MouseEvent e 代表当前的鼠标事件。
    ---------------
    public void mouseClicked(MouseEvent e) 
    {
    String a=new String();
    a=obj.textfield.getText();//这里的obj是不是类C的对象
    obj.combobox.addItem(a);//这里的obj是不是类C的对象
    }obj是类chap4_4的对象
      

  2.   

    oracs(有技术没约束)朋友
    我说下我的解释看我是不是清楚了mymouselistener=new MyMouseListener(this);这里用MyMouseListener的构造函数把chap4_4的this指针指向的对象是拥有了成员数据和方法的对象,
    下面的this.obj中的obj可以称mymouselistener类中的成员数据,this.obj=obj,后面的obj是把chap4_4的对象直接用对象和对象传值,那这样我如果直接在mymouselistener这个类中申请chao4_4的对象并直接实例化,是不是可以代码这样写
    class MyItemListener implements ItemListener
    {
    chap4_4 obj=new chap4_4();
    public MyItemListener()
    {
    }
    上面的mymouselistener=new MyMouseListener(this);this去了就可以了这样会不会出错!
      

  3.   

    或者说我是不是不用chap4_4 obj=new chap4_4();
    直接调用mian()里chap4_4 a=new chap4_4();的a对象可以吗?a=obj.textfield.getText();//类似的写成a=a.textfield.getText();我不知道我什么细节概念没弄懂  能介绍我看下吗朋友
      

  4.   

    好象帖子沉了 顶上去 自己测试了下
    在mymouselistener里直接实例化类chap4_4好象会出错,不知道为什么

    mymouselistener=new MyMouseListener(this);
    public MyMouseListener(chap4_4 obj)
    {
    this.obj=obj;}
    这样就可以
    希望解答下