在JavaGUI程序中有没有办法将队列数据保存在内存中

在JavaGUI程序中有没有办法将队列数据保存在内存中,java,user-interface,swt,Java,User Interface,Swt,我正在编写一个程序来模拟校园学生的等待队列。这个程序使用一个链表来排队,我使用一个按钮点击事件来执行代码 它只在每次添加时工作一次。我认为它只容纳一名学生,因为该列表在按钮单击事件后被清除。我只想知道有没有办法让列表保持活动状态,直到我终止主程序 我的代码如下: private void addStd1ActionPerformed(java.awt.event.ActionEvent evt) {

我正在编写一个程序来模拟校园学生的等待队列。这个程序使用一个链表来排队,我使用一个按钮点击事件来执行代码

它只在每次添加时工作一次。我认为它只容纳一名学生,因为该列表在按钮单击事件后被清除。我只想知道有没有办法让列表保持活动状态,直到我终止主程序

我的代码如下:

private void addStd1ActionPerformed(java.awt.event.ActionEvent evt) {                                        
            Queue stdQue = new LinkedList(); <-- Create the queue

            String stName = addStdName.getText();

            int sId;
            int stdQuality;


            if(!stName.isEmpty()){
// Generate a random number as Id
            RanNum tempId = new RanNum();
            sId = tempId.genNum();

// Generate a random number as a quality number to be matched later with the apartment
            RanNum tempQuality = new RanNum();
            stdQuality = tempQuality.genNum();

            //StdDetails sTn = new StdDetails(sId, stName, stdQuality);
            stdQue.add(sId);
            stdQue.add(stdQuality);
            stdQue.add(stName);

            Object atTop = stdQue.element().toString();

            if (!stdQue.isEmpty()){
                crntTop.setText("Current top of the list: " + atTop + "  Student ID: " + sId);
                addStdName.setText("");

            }else{
                crntTop.setText("Queue list is empty.");
            }
           }else{
                crntTop.setText("Please, enter student name.");
            }

            if(!stdQue.isEmpty()){
                for(Object name : stdQue){
                lstQue.setText(name.toString());   
                }            
            }
        }
更改后的主代码如下:

class stdQueCls{
        Queue stdQue;               
        public stdQueCls(){
            stdQue = new LinkedList();
        }
    private void addStd1ActionPerformed(java.awt.event.ActionEvent evt) {                                        
        /*AddStdFrm newWindow = null;
        newWindow = new AddStdFrm();
        newWindow.setVisible(true);
        this.setVisible(false);*/
        String stName = addStdName.getText();


        if(!stName.isEmpty()){

        //StdDetails sTn = new StdDetails(sId, stName, stdQuality);

           int sId;
           int stdQuality;

           RanNum tempId = new RanNum();
           sId = tempId.genNum();

           RanNum tempQuality = new RanNum();
           stdQuality = tempQuality.genNum();

           stdQue.add(sId);
           stdQue.add(stdQuality);
           stdQue.add(stName);

        Object atTop = stdQue.element().toString();

        if (!stdQue.isEmpty()){
            crntTop.setText("Current top of the list: " + atTop + "  Student ID: " + sId);
            addStdName.setText("");

        }else{
            crntTop.setText("Queue list is empty.");
        }
       }else{
            crntTop.setText("Please, enter student name.");
        }

        if(!stdQue.isEmpty()){
            for(Object name : stdQue){
            lstQue.setText(name.toString());   
            }            
        }        
    }                                       
    }
更新 我更改了代码,将我的链接列表放入一个类中,并将其完全移出按钮单击事件。因此,新代码如下所示

    class stdQueCls{
        Queue stdQue;               
        public stdQueCls(){
            stdQue = new LinkedList();

            if (!stdQue.isEmpty()){
            for(Object all : stdQue){
            lstQue.setText(all.toString());   
            }
           }
        }
    }
    public void addStd1ActionPerformed(java.awt.event.ActionEvent evt) {                                        
        /*AddStdFrm newWindow = null;
        newWindow = new AddStdFrm();
        newWindow.setVisible(true);
        this.setVisible(false);*/
        String stName = addStdName.getText();


        if(!stName.isEmpty()){

        //StdDetails sTn = new StdDetails(sId, stName, stdQuality);
            stdQueCls stdQue1 = new stdQueCls();
           int sId;
           int stdQuality;

           RanNum tempId = new RanNum();
           sId = tempId.genNum();

           RanNum tempQuality = new RanNum();
           stdQuality = tempQuality.genNum();

           stdQue1.stdQue.add(sId);
           stdQue1.stdQue.add(stdQuality);
           stdQue1.stdQue.add(stName);

   Object atTop = stdQue1.stdQue.element().toString();

  if (!stdQue1.stdQue.isEmpty()){
   crntTop.setText("Current top of the list: " + atTop + "  Student ID: " + sId);
   addStdName.setText("");

  }else{
   crntTop.setText("Queue list is empty.");
  }
  }else{
   crntTop.setText("Please, enter student name.");
 }
}
现在,正如你们在我的课堂上所看到的,我想在一个名为queLst的文本区域中显示队列中的任何内容,正如你们所看到的,我使用了for循环来做这件事,但我的问题是它没有在文本区域中显示列表,另一件事是,当它被放置在按钮点击事件中时,它起作用,但添加了我在那一点上输入的内容,一些人能告诉我一种方法吗或者给出一个如何存档的想法

更新 我对上面的代码做了一些更改,现在它可以正常工作了,但我不知道我是否做错了一件事是,当我从队列中检索插入的数据时,它不是我期望看到的,我认为我的队列链接列表仍然没有填充

有人能看看我的代码,告诉我我在做什么是写的还是错的吗

  class stdQueCls{
        Queue<stdDetailGroup> stdQue;               
        public stdQueCls(){
            stdQue = new LinkedList<stdDetailGroup>();
            //lstQue.setText(stdQue.toString());
        }
    }

    class stdDetailGroup{
           String stdId;
           String stQuality;
           String stdName;
     public stdDetailGroup(String a, String b, String c){
        stdId = a;
        stQuality = b;
        stdName = c;
    }
    }
    public void addStd1ActionPerformed(java.awt.event.ActionEvent evt) {                                        
        /*AddStdFrm newWindow = null;
        newWindow = new AddStdFrm();
        newWindow.setVisible(true);
        this.setVisible(false);*/

        String stName = addStdName.getText();


        if(!stName.isEmpty()){

        //StdDetails sTn = new StdDetails(sId, stName, stdQuality);
           stdQueCls stdQue1 = new stdQueCls();

           int stdQualityInt;
           int sIdInt;
           String sId;
           String stdQuality;

           RanNum tempId = new RanNum();
           sIdInt = tempId.genNum();
           sId = Integer.toString(sIdInt);

           RanNum tempQuality = new RanNum();
           stdQualityInt = tempQuality.genNum();
           stdQuality = Integer.toString(stdQualityInt);

           stdDetailGroup stdDetailsAdd = new stdDetailGroup(sId, stdQuality, stName);
           stdQue1.stdQue.add(stdDetailsAdd);

           Object atTop = stdQue1.stdQue.toString();

        if (!stdQue1.stdQue.isEmpty()){
            crntTop.setText("Current top of the list: " + atTop + "  Student ID: " + sId);
            addStdName.setText("");

        }else{
            crntTop.setText("Queue list is empty.");
        }
       }else{
            crntTop.setText("Please, enter student name.");
        }

    }                                       

    private void shwQue1ActionPerformed(java.awt.event.ActionEvent evt) {                                        
        stdQueCls stdQue2 = new stdQueCls();

        lstQue.setText(stdQue2.stdQue.toString());
    }
类stdQueCls{
队列标准;
公共stdQueCls(){
stdQue=newlinkedlist();
//lstQue.setText(stdQue.toString());
}
}
类stdDetailGroup{
字符串stdId;
字符串质量;
字符串stdName;
公共stdDetailGroup(字符串a、字符串b、字符串c){
stdId=a;
stQuality=b;
stdName=c;
}
}
public void addStd1ActionPerformed(java.awt.event.ActionEvent evt){
/*AddStdFrm newWindow=null;
newWindow=newaddstdfrm();
newWindow.setVisible(true);
此.setVisible(false)*/
字符串stName=addStdName.getText();
如果(!stName.isEmpty()){
//StdDetails sTn=新的StdDetails(sId、stName、stdQuality);
stdQueCls stdQue1=新的stdQueCls();
int标准质量int;
int-sIdInt;
字符串sId;
串标准质量;
RanNum tempId=new RanNum();
sIdInt=tempId.genNum();
sId=整数.toString(sIdInt);
RanNum tempQuality=新RanNum();
stdQualityInt=tempQuality.genNum();
stdQuality=Integer.toString(stdQualityInt);
stdDetailGroup stdDetailsAdd=新的stdDetailGroup(sId、stdQuality、stName);
stdQue1.stdQue.add(stdDetailsAdd);
对象atTop=stdQue1.stdQue.toString();
如果(!stdQue1.stdQue.isEmpty()){
setText(“当前列表顶部:“+atTop+”学生ID:+sId”);
addStdName.setText(“”);
}否则{
setText(“队列列表为空”);
}
}否则{
setText(“请输入学生姓名”);
}
}                                       
私有void shwQue1ActionPerformed(java.awt.event.ActionEvent evt){
stdQueCls stdQue2=新的stdQueCls();
lstQue.setText(stdQue2.stdQue.toString());
}

在按钮的action performed事件中创建linkedlist对象时,每次单击按钮时都会创建并重新初始化该对象。要使数据持久化,请在按钮单击事件之外创建对象

假设类名为
StudentManager
,则可以在构造函数内创建对象:

class StudentManager {
   Queue stdQue;
   public StudentManager() {
      stdQue = new LinkedList(); <-- Create the queue
   }
   private void addStd1ActionPerformed(java.awt.event.ActionEvent evt)
   {
      .
      .
      stdQue.add(sId);
      stdQue.add(stdQuality);
      stdQue.add(stName);
      .
      .
   }
}
班级学生经理{
队列标准;
公共学生经理(){

stdQue=new LinkedList();啊,非常感谢。我还在学习java,有时我的问题可能不符合标准,非常感谢你的回答。我按照你的建议做了,但我得到了“找不到符号:方法addStd1ActionPerformed(evt)”addStd1.setText(“添加学生”);addStd1.addActionListener(new java.awt.event.ActionListener()){public void actionPerformed(java.awt.event.ActionEvent evt){addStd1ActionPerformed(evt);}那就是我得到错误的区域。@Jack你已经将方法
addStd1ActionPerformed
放在了
stdQueCls
类之外。只需验证一下开始括号和结束括号。是的,我确实从“code”stdQueCls“code”中取出了“code”addStd1ActionPerformed“code”方法,因为当我把它放在那里时,它开始给出一个错误在action listener中,我提到它是对这篇文章的更新。这就是为什么我将它移出并为它创建了一个单独的方法。
class StudentManager {
   Queue stdQue;
   public StudentManager() {
      stdQue = new LinkedList(); <-- Create the queue
   }
   private void addStd1ActionPerformed(java.awt.event.ActionEvent evt)
   {
      .
      .
      stdQue.add(sId);
      stdQue.add(stdQuality);
      stdQue.add(stName);
      .
      .
   }
}