按TAB键填充JTable

时间:2019-03-04 11:03:52

标签: java swing user-interface events jtable

我有一个JTable。用户将在特定列中输入ID,然后按TAB键。我需要在该列上添加事件,以从DB中获取值并填充该行的其余列,并为下一个条目创建新行。

我是Swing的新手,很难找到最好的方法,因为我可以看到2010年左右编写的示例。不知道那是否仍然有意义。

我不知道的东西:

  1. 将事件处理程序添加到表中特定列的单元格中。
  2. 填充数据后添加下一行。

2 个答案:

答案 0 :(得分:2)

您可以为此使用TableModelListener。用户更改ID列值时,将调用tableChanged()。然后,从数据库中获取相关数据并在行中进行设置。并且也添加了新行。请尝试以下示例。

(出于演示目的,我在此示例中使用了模拟数据库。它仅提供ID为“ 111”和“ 222”的行。)

import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.DefaultTableModel;
import java.util.Vector;

public class TableDataChange
{
  public static void main(String[] args)
  {
    DefaultTableModel tableModel = new DefaultTableModel(
        new Object[][] {{"", "", ""}},
        new Object[] {"ID", "Column 2", "Column 3"});

    tableModel.addTableModelListener(new TableModelListener()
    {
      @Override
      public void tableChanged(TableModelEvent e)
      {
        String id = (String) tableModel.getValueAt(e.getFirstRow(), 0);
        if (id != null)
        {
          Vector row = Database.loadRowForId(id);
          tableModel.getDataVector().set(e.getFirstRow(), row);
          tableModel.addRow(new Vector());
        }
      }
    });

    JTable table = new JTable(tableModel);

    JFrame f = new JFrame();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.getContentPane().add(new JScrollPane(table));
    f.setBounds(300, 200, 400, 300);
    f.setVisible(true);
  }
}

// Mock database
class Database
{
  static Vector loadRowForId(String id)
  {
    Vector row = new Vector();
    if (id.equals("111"))
    {
      row.add("111");
      row.add("aaa");
      row.add("bbb");
    }
    else if (id.equals("222"))
    {
      row.add("222");
      row.add("ppp");
      row.add("qqq");
    }
    return row;
  }
}

答案 1 :(得分:0)

您可以尝试这样的事情,

//Add Key Listener
table.addKeyListener(new KeyAdapter() {         
     public void keyPressed(KeyEvent event) {
         if (event.getKeyChar() == KeyEvent.VK_TAB) {
             int selectedColumn = table.getSelectedColumn();

             //Now you can search records related to ID and populate the table
         }
     }
});