我有下面的代码行移动移动:行选择不与JTable中
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.plaf.nimbus.NimbusLookAndFeel;
import javax.swing.table.DefaultTableModel;
public class NewClass1 extends JFrame {
private JTable table;
private JScrollPane scrollPane;
private DefaultTableModel defaultTableModel;
public NewClass1() {
setLocationByPlatform(true);
setLayout(new BorderLayout());
setPreferredSize(new Dimension(600, 400));
setTitle("Table Issues");
setDefaultCloseOperation(EXIT_ON_CLOSE);
createTableModel();
table = new JTable(defaultTableModel);
scrollPane = new JScrollPane(table);
getContentPane().add(scrollPane, BorderLayout.CENTER);
pack();
}
private void createTableModel() {
Vector cols = new Vector();
cols.add("A");
Vector rows = new Vector();
for (int i = 0; i < 50; i++) {
Vector row = new Vector();
row.add((i + 1) + "");
rows.add(row);
}
defaultTableModel = new DefaultTableModel(rows, cols) {
Class[] types = new Class[]{
String.class
};
@Override
public Class getColumnClass(int columnIndex) {
return types[columnIndex];
}
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
};
}
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(new NimbusLookAndFeel());
} catch (Exception e) {
}
final NewClass1 nc = new NewClass1();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
nc.setVisible(true);
}
});
while (true) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
int row = (int) (Math.random() * 50);
int move = (int) (Math.random() * 50);
nc.defaultTableModel.moveRow(row, row, move);
}
});
try{
Thread.sleep(1000);
}catch(Exception e){
}
}
}
}
请运行上面的代码,然后选择行。
我的问题是与行移动,行选择是不动的。它停留在固定位置。假设我选择了列值为25的行,在行移动后所选行必须是列值为25的行。
请帮我解决这个问题。
我真正的问题是,用户将选择行并点击菜单执行操作,同时其他线程可能已移动行,并执行活动将存在于其他行比实际之一。
[see post](http://stackoverflow.com/a/14633962/714968),作者:@Guillaume Polet – mKorbel 2013-05-03 16:03:33
@mKorbel这里的问题是模型的内容在改变,所以'convertRowIndexToModel'本身并不做的工作,但我同意在使用'javax.swing.RowSorter'会是一个更好的方法,如果'javax.swing.table.DefaultTableModel.moveRow'就是一切正在发生 - 我明白这是一个例子通用模型的变化。 – Tilo 2013-05-03 17:13:27