2015-10-29 187 views
1

假设我们有一个存储学生对象列表的类。还有另一个类使用图形用户界面来要求用户创建一个学生对象。图形用户界面

我试图做这样的

public class Database { 

    private List<Student> students; 

    public Database { 
     students = new ArrayList<Student>(); 
    } 


    public void addStudent() { 
     StudentDialog dialog = new StudentDialog(); 
     dialog.setVisible(true) 
     students.add(dialog.getStudent()); 
    } 

} 

public class StudentDialog extends JDialog { 

    private JTextField field; 

    public StudentDialog(Frame owner) { 
     super(owner); 
     field = new JTextField(); 
    } 

    public Student getStudent { 
     return new Student(field.getText()); 
    } 

} 

public class Student { 

    private String name; 

    public Student(String name){ 
     this.name = name; 
    } 
} 

的东西。然而,由于用户需要时间来输入学生这不起作用。达成目标的最习惯的方式是什么?要明确,我希望能够使用addStudent方法随时添加学生。

+0

分开你从你的接口需求的数据管理要求见How to Make Dialogs,应该没有什么区别,如果你从加入GUI,命令行或其他一些编程API。还有,什么? *“我希望能够使用addStudent方法随意添加学生。”* - 那么,你有什么问题?如果仅仅是你不想继续输入东西,那么看到 – MadProgrammer

+0

的第一部分,这实际上不起作用。当调用addStudent方法时,它会在用户在文本字段中输入任何数据之前结束。 – Halbort

+0

调用'setModal'并在'StudentDialog'中传递'true' – MadProgrammer

回答

2

当传递addStudent方法被调用,它完成用户在文本字段中输入任何数据

为了使对话框停止代码的当前执行,直到它被关闭,则需要前做出对话模式。添加setModal(true)到对话框构造

public class StudentDialog extends JDialog { 

    private JTextField field; 

    public StudentDialog(Frame owner) { 
     super(owner); 
     setModal(true); 
     field = new JTextField(); 
     // I assume you're actually adding this text field to the dialog 
    } 

    public Student getStudent { 
     return new Student(field.getText()); 
    } 

} 

你可以只使用一个JOptionPane代替

更多细节