我在我的项目中工作,需要将JTable的一行复制到另一个JTable中,第二个JTable应该只是一行表。我创建了第一个JTable的mouselistener,在双击它应该复制行并插入到另一个JTable但它不能正常工作,任何想法如何解决它?我从第一个表中的数据库获取数据。与代码:如何将一行从JTable复制到另一个JTable中
public void cputable() {
try {
conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/test","postgres","postgres");
stat = conn.createStatement();
result = stat.executeQuery("SELECT name,bus_speed,socket,cores,chipset,price*1.3 FROM CPU");
cputable.setModel(DbUtils.resultSetToTableModel(result));
result.close();
stat.close();
}
catch (Exception e){
e.printStackTrace();
}
}
,这里是我尝试复制一行代码:
cputable.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent me) {
JTable cputable =(JTable) me.getSource();
int row = cputable.getSelectedRow();
int col = cputable.getColumnCount();
if (me.getClickCount() == 2) {
cputablebottom.repaint();
for(int i = 0; i < col; i++) {
DefaultTableModel model = (DefaultTableModel) cputable.getModel();
List<String>list = new ArrayList<String>();
list.add(cputable.getValueAt(row, i).toString());
model.addRow(list.toArray());
cputablebottom.setModel(model);
}
结果前后:
编辑:
我重拍了一下的代码,现在它复制整个列表而不是只有一行。
cputable.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent me) {
JTable cputable =(JTable) me.getSource();
int row = cputable.getSelectedRow();
int col = cputable.getColumnCount();
if (me.getClickCount() == 2) {
cputablebottom.repaint();
DefaultTableModel model1 = (DefaultTableModel) cputable.getModel();
List<String>list = new ArrayList<String>();
model1.addRow(list.toArray());
for(int i = 0; i < col; i++) {
list.add(cputable.getValueAt(row, i).toString());
cputablebottom.setModel(model1);
System.out.println(model1);
System.out.println(list);
}
cputablebottom.setModel(model1);
如果第二个模型只需要一行,那么为什么不为JTable创建一个新的'TableModel',而不是向现有模型添加新行? – MadProgrammer
感谢您的回答!我在编程方面并不高级,并且尽我所能! :)我需要保持在两个行,我需要从第二个JTable复制它到第三JTable :)也侧面的问题,我怎么能限制JTable只显示一行? – Mercy
每次需要复制一行时,在第二个表中使用一个新的'TableModel' – MadProgrammer