经过几天奋斗,用JTable做了个日期选择的组件。如下图。
本意是通过前后一个月来控制表格中的显示,然后选择一个日期,再根据选择的表格的单元格的行列来确定选择的日期,上面两个ComboBox来控制年月,以及几个操作年月的按钮,但是出现了一个意外情况:如果是选择当前页面的值,选择后返回日期没问题。但是点击上一个月或者其他按钮之后,却发现无法获得其中的值了。
为解决这个情况,我在确认按钮中加了两行代码:
System.out.println(table.getSelectedRow());
System.out.println(table.getSelectedColumn());
middle.add(new JScrollPane(table));//②问题果然出在这里,这里每点击一次操作按钮都会执行一次②代码,这行代码在执行第一次的时候没问题,因为他新建一个JScrollPane的实例,但是执行第二次的时候又创建一个实例并添加到middle面板中,现在就产生的一个问题了。middle中添加了两个JScrollPane实例,而这两个实例又都是以table为他的view,那么就产生一个矛盾了:我在选择单元格的时候是选择的哪个JScrollPane中的table,而在监听的时候又是监听哪个JScrollPane中的table。
这个问题暂时没懂。。。但是解决方案倒是有了
initTable();
js.setViewportView(table);
middle.add(js);
不重新new JScrollPane实例,而是将js的view重新设置。问题解决。。