gpt4 book ai didi

java - 通过单击其他 JFrame 中的按钮刷新 JFrame 中的 JTable

转载 作者:行者123 更新时间:2023-11-30 04:27:43 24 4
gpt4 key购买 nike

我们有这个 Java 101 类,我们使用 Netbeans 7.2.1。到目前为止,我们正在从数据库(MySql)添加数据。我有这个问题:

我两 (2) JFrame - mainFrame (1)、addForm (2)

mainFrame中,我使用表格来查看我的数据(LastNameFirstName)和(添加)按钮,我得到了(刷新)每次更改表格时,我都会单击该按钮来刷新表格。在第二帧(addForm)中,我得到了文本字段(lastnamefirstname)和一个(save)按钮。

场景

mainFrame中,我单击(add)按钮,然后出现addForm。我向 (LastName, FirstName) 字段提供数据,然后单击 Save 按钮保存数据。之后,我需要返回到 mainFrame 来单击 refresh 按钮以查看新添加到表中的数据。

问题

有没有办法在保存数据后自动刷新我的JTable

因为当我单击“保存”时,它不会出现在表格中,所以我总是从 mainFrame 中单击refresh 来查看它。当仅使用一个 JFrame 时,我可以自动看到它(从 YouTube 教程制作人员到上传者)。

希望您能抽出时间来教我。我在互联网上搜索但未能找到答案。提前致谢。

最佳答案

这个网站上有很多人问同样的问题,解决方案几乎总是相同的:

如果您需要让用户处理主窗口所依赖的输入,那么当您需要模式对话框时,请勿使用第二个 JFrame。使用模态 JDialog 或 JOptionPane 来显示依赖窗口。执行此操作时,主窗口的程序流程将被中断,直到对话框完全处理完毕,这样主程序就可以轻松检测到用户何时完成了以依赖窗口为程序的操作当从属窗口(模型对话框)显示后,流程将从该位置立即恢复。然后,您可以查询从属窗口显示的字段,并使用其中包含的信息来更新 JTable 的模型。

请注意,另一个选项是使用 CardLayout 交换 View ,将第二个 View 显示为主窗口上的新 View 。

另一方面,如果主窗口并不完全依赖于处理第二个窗口的用户,则考虑将其显示为非模式对话框或通过 CardLayout 或 JTabbedPane 显示为单独的 View 。

例如:

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;

public class DialogEg {

private static void createAndShowGui() {
MainWin mainPanel = new MainWin();

JFrame frame = new JFrame("DialogEg");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}

class MainWin extends JPanel {
private String[] COL_NAMES = { "Last Name", "First Name" };
private DefaultTableModel model = new DefaultTableModel(COL_NAMES, 0);
private JTextField lastNameField = new JTextField(15);
private JTextField firstNameField = new JTextField(15);

public MainWin() {
final JPanel dataPanel = new JPanel();
dataPanel.add(new JLabel("Last Name:"));
dataPanel.add(lastNameField);
dataPanel.add(Box.createHorizontalStrut(15));
dataPanel.add(new JLabel("First Name:"));
dataPanel.add(firstNameField);

JPanel btnPanel = new JPanel();
btnPanel.add(new JButton(new AbstractAction("Add Name") {

@Override
public void actionPerformed(ActionEvent arg0) {
lastNameField.setText("");
firstNameField.setText("");
int result = JOptionPane.showConfirmDialog(MainWin.this, dataPanel,
"Enter Name", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
if (result == JOptionPane.OK_OPTION) {
String lastName = lastNameField.getText();
String firstName = firstNameField.getText();
Object[] dataRow = new String[] { lastName, firstName };
model.addRow(dataRow);
}
}
}));

setLayout(new BorderLayout());
add(new JScrollPane(new JTable(model)), BorderLayout.CENTER);
add(btnPanel, BorderLayout.SOUTH);

}
}

关于java - 通过单击其他 JFrame 中的按钮刷新 JFrame 中的 JTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15456356/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com