我开始开发一个与表一起使用的应用程序。最初,JFrame的表是空的。当我点击JFrame JDialog窗口上的添加行按钮打开时。在其中,我编写了所需的属性,当我单击save时,它们应该保存在JFrame上的表所代表的列表中,并在关闭JDialog时显示。这是不起作用的部分。我知道我的模型很好,其他所有东西都可以看到,因为当我点击一个按钮后我添加了一个实现JFrame刷新方法的按钮。请帮帮我。
JFrame类中的方法:
public void fillTable() {
ModelTabele mt = new ModelTabele(true, kontrolor.Kontrolor.vratiObjekatKontrolora().vratiAsistente());
jTable1.setModel(mt);
} //applying model on Jframe
和JDialog类中的方法:
private void jbtSaveActionPerformed(java.awt.event.ActionEvent evt) {
Asistent a = new Asistent();
a.setSifra(Integer.valueOf(jtfSifra.getText()));
a.setIme(jtfIme.getText());
a.setPrezime(jtfPrezime.getText());
a.setTitula(jtfTitula.getText());
a.setPredmet((Predmet) jcbPredmeti.getSelectedItem());
kontrolor.Kontrolor.vratiObjekatKontrolora().dodajAsistenta(a);
this.dispose();
} //after adding attributes, JDialog needs to be closed and object is saved in a list represented in table
答案 0 :(得分:2)
这是您需要做的事情。
TableModel
传递给对话框类。类似的东西:(注意:既然你没有使用英语,我不知道你的变量和方法是什么,我会用自己的):
class MyDialog extends JDialog {
DefaultTableModel model;
public MyDialog(JFrame frame, modal true, DefaultTableModel model) {
super(frame, modal);
this.model = model;
}
private void saveButtonActionPerformed(ActionEvent e) {
...
model.addRow(...)
}
}
class MyFrame extends JFrame {
private JTable jTable1;
private void showDialogActionPerformed(ActionEvent e) {
DefaultTableModel model = (DefaultTableModel)jTable1.getModel();
MyDialog dialog = new MyDialog(this, true, model);
}
}
现在两个类都引用了相同的TableModel
,并且可以从任何一个更新。
答案 1 :(得分:1)
退一步看看责任的错误。该对话框负责收集信息并通知调用用户选择的选项(保存,取消,什么),对话框不应该修改程序状态(恕我直言)。
为此,您可以考虑将对话框设置为JDialog
(不使用按钮),而不是创建自定义JPanel
,而是使用JOptionPane
代替...
// editorPane is your panel that gathers the information
int option = JOptionPane.showOptionDialog(null, editorPane,
"Add",
JOptionPane.NO_OPTION,
JOptionPane.PLAIN_MESSAGE,
null,
new Object[]{"Save", "Cancel"},
"Save"
);
if (option == 0) {
// Get the details from the editor pane...
// Update model
}
基本上,您可以通过JOptionPane
向用户显示编辑器窗格。当用户选择其中一个可用选项(在此示例中为save
或cancel
)时,您将检查用户选择的内容并根据该结果获取editorPane
中的值然后将它们应用于表模型或简单地忽略更改......作为示例
答案 2 :(得分:0)
有很多方法可以解决这个问题:
TableModel
并让任何人更新它。这应该让你的代码工作,但它确实感觉不对。 JFrame
课程中,并启动模式JOptionPane
,以阻止处理,如@MadProgrammer所示。JFrame
类的模型更新方法,并将JFrame
类作为此接口的实例传递给JDialog
类。在save
方法中,您可以使用数据作为输入来调用接口API。