【问题标题】:Display Data in a Jtable upon Row Selection from Another JTable从另一个 JTable 中选择行时在 Jtable 中显示数据
【发布时间】:2012-03-03 06:26:03
【问题描述】:

我已阅读此网站上的一个问题。并且由于我与提出与我相同问题的人遇到了同样的问题,因此我想做一个后续问题。您如何将其放入代码中:

  • 询问主表它的选定行是什么 (getSelectedRow())。
  • 将此视图行索引转换为模型行索引 (convertRowIndexToModel())。
  • 向模型询问该索引处的数据,并提取数据的 ID。该模型应该是您编写的扩展 AbstractTableModel 的类。
  • 然后从这个ID获取要在三个子表中展示的数据,并更改这三个表的模型(或模型中包含的数据)。

提前致谢。在我的程序的这一部分中,我很难过。因为我只知道

tablePersonalProperty.setModel(DbUtils.resultSetToTableModel(rs)); 

显示表格中的所有项目时。我需要的是从我从主表中选择的内容中显示具有相同 ID 的项目...

【问题讨论】:

  • 执行一个只返回具有给定 ID 的行的 SQL 查询,并调用您只知道的方法。你也可以阅读教程:docs.oracle.com/javase/tutorial/uiswing/components/table.html
  • 您是在问如何实现模型以正确选择,或者如何根据您的选择获取其他表的数据?
  • 欢迎来到这个论坛,只是:请不要对我们大喊大叫:-)
  • 是的。我正在尝试根据我选择的内容从主表中获取数据。信息将反映在选项卡式窗格中的另一个表上。主表只是我的参考。

标签: java mysql swing


【解决方案1】:

在我们帮助您编写代码之前,我们需要更多信息。 您的表是否具有完全相同的列? 您是否已经在使用自己的自定义数据模型?如果没有,那么您可能需要自己尝试。我不能为你写这个,因为我不知道你需要在你的模型中包含什么。如果您使用的是 netbeans,那么您可以使用表单设计器来帮助您编写表模型。将 JTable 添加到 JPanel 的 JFrame 后,只需查看 JTable 的属性即可。无论如何,我最终创建了自己的代码,但 Netbeans 生成的代码帮助我开始了。

【讨论】:

  • 我的 Jframe 上有一个(主)表。它有 3 列(ClientID、LastName、FirstName)。我使用此表查看列出的客户的详细信息。在同一框架上,我有 4 个选项卡式窗格。前两个由文本框组成。每次我从主表中单击/选择时,与该客户端相关的信息都会出现在文本框中。
  • 问题不是出自我的查询吗?我有点困惑。再次感谢您的回复
【解决方案2】:

此示例代码将帮助您做您正在寻找的事情,它展示了如何在行中的点击事件中将表格行从一个表格移动到另一个表格,

public class InsertRows{
  public static void main(String[] args) {
  new InsertRows();
  }

  public InsertRows(){
  final JTable table, table2;
  final DefaultTableModel model, model2;
  JFrame frame = new JFrame("Inserting rows in the table!");
  String data[][] = {{"Vinod","100"},{"Raju","200"},{"Ranju","300"}};
  String col[] = {"Name","code"};
  Object[][] selrowData = {};   
  model = new DefaultTableModel(data,col);
  model2 = new DefaultTableModel(selrowData,col);

  GridLayout gl = new GridLayout(2,1); 

  table = new JTable(model);
  table2 = new JTable(model2);
  //Insert first position
  model.insertRow(0,new Object[]{"Ranjan","50"});
  //Insert 4 position
  model.insertRow(3,new Object[]{"Amar","600"});
  //Insert last position
  model.insertRow(table.getRowCount(),new Object[]{"Sushil","600"});


    ListSelectionModel cellSelectionModel = table.getSelectionModel();
    cellSelectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

    cellSelectionModel.addListSelectionListener(new ListSelectionListener() {
      public void valueChanged(ListSelectionEvent e) {
        String selectedData = null;
        String selectedData2 = null;
    Object[][] val = {};
        int selectedRow = table.getSelectedRow();
        int selectedColumns = table.getColumnCount();

        model2.insertRow(0,new Object[]{(String) table.getValueAt(selectedRow, selectedColumns-selectedColumns),(String) table.getValueAt(selectedRow, selectedColumns-1) });   
      }
    });

  frame.setLayout(gl);
  frame.add(new JScrollPane(table));
  frame.add(new JScrollPane(table2));
  frame.setSize(600,600);
  frame.setVisible(true);
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}

【讨论】:

  • 是的,但是您必须将数据从 ResultSet 移动到 Vinesh 发布的代码中显示的模型中。将数据从 ResultSet 中拉出并放入 Object 数组中。
猜你喜欢
  • 2012-02-20
  • 1970-01-01
  • 2012-12-26
  • 1970-01-01
  • 2017-01-02
  • 2017-02-23
  • 1970-01-01
  • 1970-01-01
  • 2014-05-06
相关资源
最近更新 更多