Java 选择仅限于2行的JTable

Java 选择仅限于2行的JTable,java,swing,jtable,listselectionlistener,Java,Swing,Jtable,Listselectionlistener,我想将JTable中的行选择限制为仅2行。如果用户尝试选择第三行(Ctrl+单击),则应以编程方式取消选择表中最早的选择。为了实现这一点,我在表中添加了ListSelectionListener。 在下面的示例中,“clearSelection()”似乎不起作用 如果有更简单或更优雅的方法来达到同样的效果,请给出建议 封装测试; 导入java.util.array; 导入java.util.Vector; 导入javax.swing.JFrame; 导入javax.swing.JScrollPa

我想将JTable中的行选择限制为仅2行。如果用户尝试选择第三行(Ctrl+单击),则应以编程方式取消选择表中最早的选择。为了实现这一点,我在表中添加了ListSelectionListener。 在下面的示例中,
“clearSelection()”
似乎不起作用

如果有更简单或更优雅的方法来达到同样的效果,请给出建议

封装测试;
导入java.util.array;
导入java.util.Vector;
导入javax.swing.JFrame;
导入javax.swing.JScrollPane;
导入javax.swing.JTable;
导入javax.swing.ListSelectionModel;
导入javax.swing.event.ListSelectionEvent;
导入javax.swing.event.ListSelectionListener;
公共类JTableDemo{
公共静态void main(字符串[]argv){
向量行数据=新向量();
对于(int i=0;i<10;i++){
向量colData=新向量(Arrays.asList(“行”+(i+1));
rowData.add(colData);
}
字符串[]columnNames={“header”};
Vector columnNamesV=新向量(Arrays.asList(columnNames));
JTable table=新的JTable(rowData,columnNamesV);
table.getSelectionModel().setSelectionMode(ListSelectionModel.MULTIPLE\u INTERVAL\u SELECTION);
table.setColumnSelectionAllowed(false);
SelectionListener=新建SelectionListener(表);
table.getSelectionModel().addListSelectionListener(listener);
JFrame f=新的JFrame();
f、 设置大小(300300);
f、 添加(新JScrollPane(表));
f、 setVisible(真);
}
私有静态类SelectionListener实现ListSelectionListener{
JTable表;
int-preveselectedrow;
int oldSelectedRow=-1;
SelectionListener(JTable表){
this.table=表格;
}
public void值已更改(ListSelectionEvent e){
如果(如getValueIsAdjusting()){
返回;
}
if(e.getSource()==table.getSelectionModel()&&table.getRowSelectionLowed()){
int[]selectedRows=table.getSelectedRows();
如果(selectedRows.length==1){
prevSelectedRow=selectedRows[0];
返回;
}
如果(selectedRows.length>1){
int currentSelectedRow=-1;
println(“第一个和最后一个索引是:“+e.getFirstIndex()+”,“+e.getLastIndex()”);
如果(oldSelectedRow==-1){
for(int i=0;i
如果有更简单或更优雅的方法来达到同样的效果,请给出建议

您可以扩展
DefaultListSelectionModel
并覆盖
addSelectionInterval(…)
方法。然后将自定义选择模型添加到表中

谢谢你的回复。 我已尝试重写“addSelectionInterval(…)”方法,但无法解决我的问题

我没有使用“clearSelection()”,而是使用了“RemoveOwsElectionInterval(…)”,这似乎和预期的一样有效

。。。
如果(selectedRows.length>1){
int currentSelectedRow=-1;
println(“第一个和最后一个索引是:“+e.getFirstIndex()+”,“+e.getLastIndex()”);
如果(oldSelectedRow==-1){
for(int i=0;i