怎么在一个JTable监听中把对象 JTable jt1,行数 row,列数 col,传入一个Button监听中?
jt1.addMouseListener(new MouseAdapter() {
    public void mouseClicked(MouseEvent e) {      row = jt1.getSelectedRow();// 获取选取行
     col= jt1.getSelectedColumn();//获取列
     int k = row + 1;// +1是因为默认方式为0行0列开始;
     int l=col+1;
     String tt1 = (String) jt1.getValueAt(row,col);
     System.out.println("你选择的是第" + k + "行," + l+"列");
    }
   });
把上面三个对象和参数jt1,row,col 传入下面监听中?
private class jb1Listener implements ActionListener{
public void actionPerformed(ActionEvent e) {

//传入这里 (注意这俩个监听不在同一包里)
new OpenRoom().openRoom();

}
}
还有怎么在获取后设置row行col列单元格的颜色?

解决方案 »

  1.   


    试过了 不行的 set,get方法 构造方法都试过了 关键是一new 就初始化了 方法还没法传,IO都试了 参数可以传 JTable对象就不行了 以前都是写在方法里 调用的时候传过去 但是现在这招不灵了~~哎 
      

  2.   

    不同包的两个类可以互相追加实例引用
    比如
    class A {
        B b;
        public xxx() {
            if (b.getyyy()) { //通过b.getyyy方法获取b的某个成员        }
        }
        public void addxxx(B b) {this.b = b;} //追加b的实例引用
    }class B {
        public void xxx() {
            把jt1,row,col保存到相应的成员变量中
        }
    }
    此法也适用回调的方式
    如果A,B两个类完全不能发生关系,那就只能通过外部媒体(如文件,网络等等),比如,A的时候把相关信息序列化保存到文件中,B从序列化文件中把对象反序列化回来,不过这样也需要互相之间的包import进来(至少反序列化需要,否则反序列化失败)
      

  3.   

    可以用反射 Class.forName("").k
      

  4.   

    能再详细点么?谢谢 我是新手 这个追加实例有点看着懵。就是在b.getjt1()后b.getjt1就是B中的jt1?然后addXXX方法中要怎么做?在Button的监听中调用addXXX?
      

  5.   

    定义一个类,里面放静态的常量,还有你说的设置颜色:如果是设置选中行的颜色的话,直接用setSeleted...方法就行了,具体的方法名忘了,如果是单元格的话是要重写JTable的方法的,挺麻烦的。
      

  6.   


    定义静态成员变量后 必须定义为Final 但是定义为Final后row和col不能被修改 我怎么获得row=jt1.getSelectedRow();?
      

  7.   

    jt1.addMouseListener(new MouseAdapter() {
                public void mouseClicked(MouseEvent e) {             row = jt1.getSelectedRow();// 获取选取行
                 col= jt1.getSelectedColumn();//获取列
                 int k = row + 1;// +1是因为默认方式为0行0列开始;
                 int l=col+1;
                 String tt1 = (String) jt1.getValueAt(row,col);
                 System.out.println("你选择的是第" + k + "行," + l+"列");
                }
               });
    在Listener中做过修改或定义的row col 只能修饰为Final类型~ 请问这?
      

  8.   

    jt1.addMouseListener(new MouseAdapter() exteds XXXObject{ //继承Observableprivate class jb1Listener implements ActionListener,Observer{ //实现Observer这样两者就建立了联系,传参数应该也没什么问题
      

  9.   

    public int getRow() {
    return row;
    }
    public void setRow(int row) {
    this.row = row;
    }
    public int getCol() {
    return col;
    }
    public void setCol(int col) {
    this.col = col;
    }private class jb1Listener implements ActionListener{
    public void actionPerformed(ActionEvent e) {

    a=new AddJTable().getRow();
    b=new AddJTable().getCol();
    System.out.println("  传过来a=   "+a+"  传过来b=   "+b+"   JTable =  "+jt1);
    new OpenRoom().openRoom();

    }
    }能告诉我为什么这样传不过去么?
      

  10.   

    实在想这么传参,那就改成单例模式吧!写个类工厂来创建类实例,就不用new了,这样再用set、get方法在不同的位置传参。
      

  11.   


    集合可以传对象?传过去之后不会自动转化成String类型?
      

  12.   

    1.定义一个对象,属性为row,col,jTable,并定义为被观察者import java.util.Observable;
    import javax.swing.JTable;public class Location extends Observable{ private int row;

    private int col;

    private JTable jTable;

    public int getRow() {
    return row;
    } public int getCol() {
    return col;
    } public JTable getjTable() {
    return jTable;
    }

    public void addRecord(int row, int col, JTable jTable) {
    this.row = row;
    this.col = col;
    this.jTable = jTable;

    setChanged();
    notifyObservers(this);
    }
    }
    2.在第二段代码里改造如下:
    public class jb1Listener implements ActionListener implements Observer
    {
          private Location location = new Location();      public void actionPerformed(ActionEvent e) { 
          //传入这里 (注意这俩个监听不在同一包里) 
          new OpenRoom().openRoom(); 
          } 
         
          @Override
          public void update(Observable o, Object arg) {
          location = (Location)arg;
          System.out.println(lo.getCol());
          }
    }
    这样,你可以在里面使用location对象,随便你怎么使。
    3.在第一段代码里:
    jt1.addMouseListener(new MouseAdapter() {
                public void mouseClicked(MouseEvent e) {             row = jt1.getSelectedRow();// 获取选取行
                 col= jt1.getSelectedColumn();//获取列
                 int k = row + 1;// +1是因为默认方式为0行0列开始;
                 int l=col+1;
                 Location location = new Location();
                 jb1Listener listener = new jb1Listener ();
                 //被观察者把观察者加上。
                 location.addObserver(listener);
                 
                 location.addRecord(k, l, jt1);
                }
               });
    }这样,一旦jt1触发MouseAdapter事件,则会新产生一个location,并把location对象传到观察者jb1Listener 里。楼主你可以试试这个方法
      

  13.   


    前面基本都调试通过了 但是
     jb1Listener listener = new jb1Listener ();
      //被观察者把观察者加上。
      location.addObserver(listener);
    这一句 jb1Listener调不到,请问怎么调用另外一个包中的监听类jb1Listener?能给我点思路么?
      

  14.   


    谢谢!我调通了~那个调不到jb1Listener是原来我是 Private的问题 改成Public就OK了~ 太谢谢你了~终于对观察者设计模式有所了解了,非常感谢,接分~