从另一个内部框架动态更新内部框架 table
Update jinternalframe table dynamically from another jinternalframe
我有两个内部框架,第一个用于查看,另一个用于数据处理。第一个jinternalframe的数据table与第二个jinternalframe相同。我想要的是在我从第二个 jinternalframe 添加数据后,让第一个 jinternalframe 更新它的 jtable 。请参阅第一个 jinternal 框架和第二个 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("");
}
}
The table of the first jinternalframe is the same as the second jinternalframe.
不能相同table因为一个 Swing 组件只能有一个父组件。所以你必须有两个 tables.
What I want is to make the first jinternalframe updates its jtable after I added data from second jinternalframe.
所以也许您是说您希望 "data" 在两个 table 中相同。
如果是这种情况,那么您可以在两个 table 之间共享 TableModel
。然后,当一个数据发生变化时,另一个数据会自动更新:
DefaultTableModel model = new DefaultTableModel(...);
JTable table1 = new JTable( model );
JTable table2 = new JTable( model );
如果需要,您可以在 table 之一中显示不同的列,因为您可以从 TableColumnModel
中删除 TableColumn
。类似于:
TableColumnModel tcm = table1.getColumnModel();
tcm.removeColumn( tcm.getColumn(...) ); // specify column number
或
table1.removeColumn( table1.getColumn(...) ); // specify column name
感谢 camickr 的想法我已经通过让其他框架访问第一帧的 table 解决了我的问题。我还通过仅创建 DefaultTableModel 实例修复了一些代码以使其整洁。这是解决我的问题的代码:
在第一帧中我添加了这个:
public static JTable getTable(){
return table1;
}
在第二帧中我实现了它:
firstFrame.getTable().setModel(table.loadAlloc());
我有两个内部框架,第一个用于查看,另一个用于数据处理。第一个jinternalframe的数据table与第二个jinternalframe相同。我想要的是在我从第二个 jinternalframe 添加数据后,让第一个 jinternalframe 更新它的 jtable 。请参阅第一个 jinternal 框架和第二个 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("");
}
}
The table of the first jinternalframe is the same as the second jinternalframe.
不能相同table因为一个 Swing 组件只能有一个父组件。所以你必须有两个 tables.
What I want is to make the first jinternalframe updates its jtable after I added data from second jinternalframe.
所以也许您是说您希望 "data" 在两个 table 中相同。
如果是这种情况,那么您可以在两个 table 之间共享 TableModel
。然后,当一个数据发生变化时,另一个数据会自动更新:
DefaultTableModel model = new DefaultTableModel(...);
JTable table1 = new JTable( model );
JTable table2 = new JTable( model );
如果需要,您可以在 table 之一中显示不同的列,因为您可以从 TableColumnModel
中删除 TableColumn
。类似于:
TableColumnModel tcm = table1.getColumnModel();
tcm.removeColumn( tcm.getColumn(...) ); // specify column number
或
table1.removeColumn( table1.getColumn(...) ); // specify column name
感谢 camickr 的想法我已经通过让其他框架访问第一帧的 table 解决了我的问题。我还通过仅创建 DefaultTableModel 实例修复了一些代码以使其整洁。这是解决我的问题的代码:
在第一帧中我添加了这个:
public static JTable getTable(){
return table1;
}
在第二帧中我实现了它:
firstFrame.getTable().setModel(table.loadAlloc());