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;
	}
};

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沧浪之水、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值