java 从基础页面传参进入新页面,初始化表格数据,获取表格焦点选中位置时焦点丢失的问题 解决

问题描述:
一般这种情况不会显示报错,但debug起来时你会发现grabFocus()方法的是不能定位焦点的,用hasFocus()方法来验证,会发现boolean为false。
原因分析:
1.因为我在基础页面做定位焦点操作时是可以获取到焦点的,而且相同的操作写在新页面的查询方法中也可以实现,说明在初始化定位焦点过程中初始化表格并没有完成渲染,确保页面渲染的线程完成后再进行定位操作即可。
2.其他原因:建议尽量少使用setEnabled(false)这种设置表格不可编辑的方式,因为有可能也会导致表格不但不可编辑,而且不可选中,更建议使用DefaultTableModel;

解决方法:
1.再开启一个线程,设置休眠时间,专门用来做初始化页面的焦点定位,提示:定位之后若无徐其他操作及时关闭线程,避免线程池占用以及线程冲突,示例代码如下:

		final TTable tb1 = (TTable) this.getComponent("TABLE");
		new Thread(){
			@Override
			public void run() {
				// TODO Auto-generated method stub
				//super.run();
				try {
					Thread.sleep(1*100);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				tb.grabFocus();
				if(row >= 0){
					table.setSelectedRow(row);
				}else{
					table.setSelectedRow(0);
				}
				//为DeptTable设置键盘监听
				tb1.addKeyListener(new KeyAdapter(){
				public void keyPressed(KeyEvent e)  {
					int count = table.getRowCount();
					//当按中向下方向键时,焦点下移
					if (e.getKeyCode()==38) {
						int row = table.getSelectedRow() - 1;
						if (row < 0)
							row = 0;
						table.grabFocus();
						table.setSelectedRow(row);
						}else if(e.getKeyCode()==40){
							//当按中向上方向键时,焦点上移
							int row = table.getSelectedRow() + 1;
							if (row >= count)
								row = count - 1;
							table.grabFocus();
							table.setSelectedRow(row);
						}else if (e.getKeyCode()==10) {
							//当按中回车键时。去除键盘监听时间,并且触发表格点击事件,并将焦点转移至收费
							tb1.removeKeyListener(this);
							onBedTable();
						}else{
								
						}
					}
				});
			}
		}.start();

2.更建议使用DefaultTableModel方式来实现不可编辑的效果。

DefaultTableModel tablemodel = new DefaultTableModel(15,1);
table = new JTable(tablemodel ){
public boolean isCellEditAble(int row,int column){
return false;
	}
};

如果有其他好的方式,还请大牛们分享一下,虚心求教。

你可能感兴趣的:(日常问题处理)