Java,如何从一个帧刷新另一个帧中的JTable
所以我有一个大型机类,其中有一个JTable,列出了存储在DB中的所有产品。在监听器的帮助下,JButton将打开AddProduct(另一个类和另一个窗口/框架),我可以在其中向DB中添加产品。不幸的是,我不确定在AddProduct添加新产品并自动关闭后,如何在大型机中更新/重新验证JTable。 请给我一些想法,我怎样才能轻松解决这个问题 由于项目规模较大,以下是相关部分: 来自MainFrame.javaJava,如何从一个帧刷新另一个帧中的JTable,java,swing,jtable,jframe,actionlistener,Java,Swing,Jtable,Jframe,Actionlistener,所以我有一个大型机类,其中有一个JTable,列出了存储在DB中的所有产品。在监听器的帮助下,JButton将打开AddProduct(另一个类和另一个窗口/框架),我可以在其中向DB中添加产品。不幸的是,我不确定在AddProduct添加新产品并自动关闭后,如何在大型机中更新/重新验证JTable。 请给我一些想法,我怎样才能轻松解决这个问题 由于项目规模较大,以下是相关部分: 来自MainFrame.java public JPanel tabProducts() { JPanel
public JPanel tabProducts() {
JPanel panel = new JPanel(new MigLayout("","20 [grow, fill] 10 [grow, fill] 20", "20 [] 10 [] 20"));
/** Labels **/
JLabel label = new JLabel("List of all available products");
/** Buttons **/
JButton add = new JButton("Add product");
add.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new AddProduct();
}
});
JButton update = new JButton("Update product");
update.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new UpdateProduct(ps.getProductByID(15));
}
});
/** TABLE: Products **/
String[] tableTitle = new String[] {"ID", "Name", "Type", "Price", "In stock"};
String[][] tableData = null;
DefaultTableModel model = new DefaultTableModel(tableData, tableTitle);
JTable table = null;
/** Disable editing of the cell **/
table = new JTable(model){
public boolean isCellEditable(int r, int c) {
return false;
}
};
/** Load the products from DB **/
List<Product> listInv = ps.getProductsByAtt(new ArrayList<String>());
for (int i = 0; i < listInv.size(); i++) {
model.insertRow(i, new Object[] {
listInv.get(i).getID(),
listInv.get(i).getName(),
listInv.get(i).getType(),
listInv.get(i).getPrice(),
listInv.get(i).getQuantity()
});
}
/** Add scroll pane **/
JScrollPane scrollpane = new JScrollPane(table);
/** Add everything to the panel **/
panel.add(label, "wrap, span");
panel.add(scrollpane, "wrap, span");
panel.add(add);
panel.add(update);
return panel;
}
您需要处理JTable模型部件,然后进行刷新,重新验证即可。
只需尝试一些JTable动态更新的示例,如您需要处理JTable模型部分,然后刷新,重新验证即可。
只需尝试一些JTable动态更新的示例,如也许
AddProduct
类中返回所创建的产品
的静态方法可以解决您的问题。例如,看看APIstatic String showInputDialog(对象消息)
也许AddProduct
类中返回创建的产品的静态方法可以解决您的问题。看看API,例如静态字符串showInputDialog(对象消息)
简单的方法是在主类中有一个方法,用数据填充表,在actionPerformed方法中处理添加新记录的操作,在添加记录后调用该方法。这样,主类将处理表模型的更新,JTable的内部将处理表的重新绘制。您甚至可以使用UpdateProducts中的方法仅在添加记录成功时更新表
public void actionPerformed(ActionEvent e) {
UpdateProduct up = new UpdateProduct();
if(up.addRecord(ps.getProductByID(15))){
fillTable();
}
}
希望这会有所帮助。简单的方法是在主类中有一个方法,用数据填充表,在actionPerformed方法中处理添加新记录的操作,在添加记录后调用该方法。这样,主类将处理表模型的更新,JTable的内部将处理表的重新绘制。您甚至可以使用UpdateProducts中的方法仅在添加记录成功时更新表
public void actionPerformed(ActionEvent e) {
UpdateProduct up = new UpdateProduct();
if(up.addRecord(ps.getProductByID(15))){
fillTable();
}
}
希望这能有所帮助。不太确定该尝试什么。我用gui工作的第二天,所以我有点吓坏了,因为与我还没有完成的程序的其余部分相比,这只是一个小小的挫折。我在谷歌上搜索过,但大多数答案都没有帮助,或者我不知道如何实现它们。所以,当我问我应该从哪里开始。我不是在找一个人为我编程,只是为了给我指出正确的方向。我真的不知道该尝试什么。我用gui工作的第二天,所以我有点吓坏了,因为与我还没有完成的程序的其余部分相比,这只是一个小小的挫折。我在谷歌上搜索过,但大多数答案都没有帮助,或者我不知道如何实现它们。所以,当我问我应该从哪里开始。我并不是在找一个人来为我编程,只是为了给我指出正确的方法。你可能是指正确的事情,只是主类正在处理……重绘JTable是错误的:表内部将触发所有必要的重绘(顺便说一句,Swing speak中的重绘)-假设模型触发了DefaultTableModel希望清除的正确事件。我不太经常使用swing。你可能是说正确的事情,只是主类正在处理…JTable的重绘是错误的:表内部将触发所有必要的重绘(顺便说一句,swing speak中的重绘)-前提是模型触发了DefaultTableModel希望清除的正确事件。我不经常使用swing。再次声明:如果模型运行,您不需要(不重新绘制不刷新不重新验证)在JTable上执行任何操作…再次声明:您不需要(不重新绘制不刷新不重新验证)如果模型表现良好,在JTable上做任何事情……为什么以一切好的名义建议op使用静态的任何东西?对不起,这是个糟糕的建议-1投赞成票。为什么你以“一切都好”的名义建议op使用静态的东西?对不起,这是个糟糕的建议-1票。