2016-11-18 70 views
-1

我有两个内部帧,第一个用于查看,另一个用于数据处理。第一个内框架的数据表与第二个内框架相同。我想要的是在添加第二个jinternalframe的数据后,让第一个jinternalframe更新它的jtable。请参阅第一个框架和第二个框架的附件照片。 First Jinternalframe从另一个内部帧动态更新内部帧表

Second jinternalframe

而且这是用于第一帧的代码片断:

table1 = new JTable(); 
    table1.setModel(loadTable1()); 
    scrollPane.setViewportView(table1); 
    } 
    public static DefaultTableModel loadTable1(){ 
    data = new ModelDB(); 
    tableModel1 = new DefaultTableModel(); 
    tableModel1.addColumn("ID"); 
    tableModel1.addColumn("Allocation"); 
    tableModel1.addColumn("Shipment Date"); 
    tableModel1.addColumn("Buyers"); 
    tableModel1.addColumn("Design"); 

    try{ 
     List<String> id = data.getAllocation().get(0); 
     List<String> allocation = data.getAllocation().get(1); 
     List<String> shipdate = data.getAllocation().get(2); 
     List<String> buyers = data.getAllocation().get(3); 
     List<String> design = data.getAllocation().get(4); 

     for(int i=0;i<id.size();i++){ 
      tableModel1.addRow(new Object[]{ 
        id.get(i),allocation.get(i),shipdate.get(i),buyers.get(i),design.get(i) 
      }); 
     } 
    }catch(Exception ex){} 

    return tableModel1; 
} 

而这是用于所述第二帧的代码片断:

@Override 
public void actionPerformed(ActionEvent evt){ 
    data = new ModelDB(); 
    String action = evt.getActionCommand(); 
    String allocation = txtAllocation.getText().toUpperCase(); 
    Date shipdate = (Date) shipDate.getModel().getValue(); 
    String buyers = String.valueOf(model4.getCheckeds()).replaceAll("[\\[\\](){}]", ""); 
    String design = String.valueOf(model.getCheckeds()).replaceAll("[\\[\\](){}]",""); 
    String stylecode = String.valueOf(model2.getCheckeds()).replaceAll("[\\[\\](){}]", ""); 
    String sizes = String.valueOf(model3.getCheckeds()).replaceAll("[\\[\\](){}]", ""); 
    String pcspack = txtPcsPack.getText(); 
    String season = txtSeason.getText().toUpperCase(); 
    String orderqty = txtQtyOrder.getText(); 

    if(action.equals("Add")){ 
     btnSave.setText("Save"); 
     btnSave.setActionCommand("Save"); 
     btnCancel.setEnabled(true); 
     txtAllocation.setEnabled(true); 
     txtAllocation.grabFocus(); 
     shipDate.setEnabled(true); 
     cmbBuyers.setEnabled(true); 
     cmbDesign.setEnabled(true); 
     cmbStyleCode.setEnabled(true); 
     cmbSize.setEnabled(true); 
     txtPcsPack.setEnabled(true); 
     txtSeason.setEnabled(true); 
     txtQtyOrder.setEnabled(true); 
    } 
    else if(action.equals("Save")){ 
     if(allocation.isEmpty() || shipdate.equals("") || pcspack.isEmpty() || season.isEmpty() || season.isEmpty() || orderqty.isEmpty() || buyers.isEmpty()|| 
       design.isEmpty() || stylecode.isEmpty() || sizes.isEmpty()){ 
      message.showMessageDialog(null, "Nothing to save"); 
     } 
     else{ 
      try{ 
       if(data.addAllocation(allocation, shipdate, buyers, design, stylecode, sizes, pcspack, season, orderqty) == true){ 
        message.showMessageDialog(null, "Data have been successfully saved"); 
       } 
       else{ 
        message.showMessageDialog(null, "Failed to save"); 
       } 
      }catch(Exception ex){ 
       ex.printStackTrace(); 
      } 
      table1.setModel(loadTable()); 
     } 
     btnSave.setText("Add"); 
     btnSave.setActionCommand("Add"); 
     btnCancel.setEnabled(false); 
     txtAllocation.setEnabled(false); 
     shipDate.setEnabled(false); 
     cmbBuyers.setEnabled(false); 
     cmbDesign.setEnabled(false); 
     cmbStyleCode.setEnabled(false); 
     cmbSize.setEnabled(false); 
     txtPcsPack.setEnabled(false); 
     txtSeason.setEnabled(false); 
     txtQtyOrder.setEnabled(false); 

     txtAllocation.setText(""); 
     model.removeChecks(); 
     model2.removeChecks(); 
     model3.removeChecks(); 
     model4.removeChecks(); 
     txtPcsPack.setText(""); 
     txtSeason.setText(""); 
     txtQtyOrder.setText(""); 
    } 

    else if(action.equals("Cancel")){ 
     btnSave.setText("Add"); 
     btnSave.setActionCommand("Add"); 
     btnCancel.setEnabled(false); 
     txtAllocation.setEnabled(false); 
     shipDate.setEnabled(false); 
     cmbBuyers.setEnabled(false); 
     cmbDesign.setEnabled(false); 
     cmbStyleCode.setEnabled(false); 
     cmbSize.setEnabled(false); 
     txtPcsPack.setEnabled(false); 
     txtSeason.setEnabled(false); 
     txtQtyOrder.setEnabled(false); 

     txtAllocation.setText(""); 
     model.removeChecks(); 
     model2.removeChecks(); 
     model3.removeChecks(); 
     model4.removeChecks(); 
     txtPcsPack.setText(""); 
     txtSeason.setText(""); 
     txtQtyOrder.setText(""); 
    } 
} 
+1

要发布一些莫名的欲望,代码片段和图片,我不确定我们中的任何一个人如何能够理解您的问题,以便我们创建一个连贯的答案。如果您没有及时获得这些信息,请考虑努力为您的代码,您的问题和您的问题提供更多的关注,包括创建和发布有效的[mcve]并询问非常具体和可回答的问题。祝你好运。 –

+0

................你好? –

+0

请注意,两个jinternalframes在两个不同的类... – SilverRay

回答

2

的第一个内框架的表格与第二个内框架的表格相同。

它不能是同一个表,因为Swing组件只能有一个父对象。所以你必须有两张桌子。

我想要的是在第二个jinternalframe添加数据后,让第一个jinternalframe更新它的jtable。

所以,也许你说你想要两个表中的“数据”是相同的。

如果是这种情况,那么您可以在两个表格之间共享TableModel。然后,当数据中的一个改变是自动更新的其他:

DefaultTableModel model = new DefaultTableModel(...); 
JTable table1 = new JTable(model); 
JTable table2 = new JTable(model); 

如果你愿意,你可以有不同的列在表中的一个显示,因为你可以从TableColumnModel删除TableColumn。喜欢的东西:

TableColumnModel tcm = table1.getColumnModel(); 
tcm.removeColumn(tcm.getColumn(...)); // specify column number 

table1.removeColumn(table1.getColumn(...)); // specify column name 
+0

是的,我的意思是第一个jinternalframe表中的数据与第二jinternalframe表中的数据相同。 – SilverRay

+0

我试过你的代码,它仍然没有更新第一个jinternalframe的jtable .... – SilverRay

0

感谢camickr的想法我已经让其他帧访问的第一帧的表解决我的问题。此外,我通过创建仅DefaultTableModel的实例来修复我的一些代码以使其整洁。这是解决我的问题代码:

第一帧我补充这里面:

public static JTable getTable(){ 
    return table1; 
} 

和第二帧里面我实现它:

firstFrame.getTable().setModel(table.loadAlloc());