怎么在一个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列单元格的颜色?
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列单元格的颜色?
试过了 不行的 set,get方法 构造方法都试过了 关键是一new 就初始化了 方法还没法传,IO都试了 参数可以传 JTable对象就不行了 以前都是写在方法里 调用的时候传过去 但是现在这招不灵了~~哎
比如
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进来(至少反序列化需要,否则反序列化失败)
定义静态成员变量后 必须定义为Final 但是定义为Final后row和col不能被修改 我怎么获得row=jt1.getSelectedRow();?
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类型~ 请问这?
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();
}
}能告诉我为什么这样传不过去么?
集合可以传对象?传过去之后不会自动转化成String类型?
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 里。楼主你可以试试这个方法
前面基本都调试通过了 但是
jb1Listener listener = new jb1Listener ();
//被观察者把观察者加上。
location.addObserver(listener);
这一句 jb1Listener调不到,请问怎么调用另外一个包中的监听类jb1Listener?能给我点思路么?
谢谢!我调通了~那个调不到jb1Listener是原来我是 Private的问题 改成Public就OK了~ 太谢谢你了~终于对观察者设计模式有所了解了,非常感谢,接分~