Java 关闭JDialog时返回null
我有一个表,它有一个用于添加新记录的JDialog,当我单击“添加”按钮并想要添加新记录,JDialog打开时,我关闭JDialog窗口,它为我的表行的所有列返回Java 关闭JDialog时返回null,java,swing,jdialog,Java,Swing,Jdialog,我有一个表,它有一个用于添加新记录的JDialog,当我单击“添加”按钮并想要添加新记录,JDialog打开时,我关闭JDialog窗口,它为我的表行的所有列返回null 这是我的JDialog构造函数: public class AddBookDialog extends JDialog implements ActionListener { public AddBookDialog(JFrame owner) { super(owner, "Add New Book", true)
null
这是我的JDialog构造函数:
public class AddBookDialog extends JDialog implements ActionListener {
public AddBookDialog(JFrame owner) {
super(owner, "Add New Book", true);
initComponents();
saveBtn.addActionListener(this);
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == cancelBtn) dispose();
else if (e.getSource() == saveBtn) saveAction();
}
}
public void saveAction() {
if (nameTf.getText().trim().length() != 0) {
if (!haveDigit(nameTf.getText().trim())) setBookName(nameTf.getText().trim());
else {
JOptionPane.showMessageDialog(null, "Book Name have digit");
return;
}
} else {
JOptionPane.showMessageDialog(null, "Enter Book Name");
return;
}
if (isbnTf.getText().trim().length() != 0) {
if (haveSpace(isbnTf.getText().trim()) || haveLetter(isbnTf.getText().trim())) {
JOptionPane.showMessageDialog(null, "Enter Correct ISBN");
return;
}
setIsbn(isbnTf.getText().trim());
} else {
JOptionPane.showMessageDialog(null, "Enter Book ISBN");
return;
}
setBorrowStatus("No");
setDate(dateGenerate());
dispose();
}
我尝试在我的table GUI类中控制此问题:
public class BookPage_Admin extends JFrame implements ActionListener {
...
public void addAction() {
AddBookDialog dialog = new AddBookDialog(this);
if (dialog.getBookName() != null && dialog.getIsbn() != null && dialog.getBorrowStatus() != null &&
dialog.getDate() != null) {
Object[] added = new Object[]{dialog.getBookID(), dialog.getBookName(), dialog.getIsbn(), dialog.getBorrowStatus(), dialog.getDate()};
model.addRow(added);
}
}
}
但当我关闭它时,它仍然会为我的行返回null
关闭时如何防止返回空值?以防无人应答: 启动对话框时,aka
AddBookDialog=newaddbookdialog(此对话框)代码>您可以覆盖帧侧的ActionListener
,如:
AddBookDialog dialog = new AddBookDialog(this);
dialog.setModal(true);
dialog.getSaveBtn().addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Object[] added = new Object[]{dialog.getBookID(), dialog.getBookName(), dialog.getIsbn(), dialog.getBorrowStatus(), dialog.getDate()};
model.addRow(added);
}
});
// importent set visible after ActionListener!!
dialog.setVisible(true);
希望它会有所帮助,为了更好地帮助您,请尽快发布一个简短、可运行、可编译、大约在凌晨发布的问题。请确认model
不会影响表的模型。@垃圾上帝,您可以解释更多吗?请确保您添加行()的model
是表的模型,而不是对不同模型的引用。该模型
是我的defaultTableModel
扩展类中的一个变量,并且不是不同的模型。那么,现在我应该在哪里插入我的saveAction()
?您可以将侦听器添加到Save
按钮,所以只需像调用dialog.saveAction()一样调用它
在执行的操作(操作事件e)