我在我的項目中工作,需要將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