2

好的,我现在遇到的问题是我在“公共类 MagazineView 扩展 Applet {”处收到错误,我得到“空白字段 Jlist 可能尚未初始化”

这是我的 GUI 小程序

public class MagazineView extends Applet {
Button button, button2;
final MagazineList Jlist;


public void init() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//NORTH PANEL
JPanel northPanel = new JPanel(new BorderLayout());
JPanel topPanel = new JPanel(new BorderLayout());
JLabel label = new JLabel("Add Magazine:     ");
final JTextField text1 = new JTextField();
JButton button = new JButton("List Magazines");


button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
            final String name=text1.getText();
            Magazine mag = new Magazine(name);
            Jlist.insert(mag);
        }

});

    topPanel.add(label, BorderLayout.LINE_START);
    topPanel.add(text1, BorderLayout.CENTER);
    topPanel.add(button, BorderLayout.LINE_END);
   //CENTER PANEL
     JPanel centerPanel = new JPanel(new BorderLayout());
     JTextArea atext = new JTextArea();
     centerPanel.add(atext, BorderLayout.CENTER);

    //BOTTOM PANEL  
    JPanel bottomPanel = new JPanel(new BorderLayout());
    JLabel label2 = new JLabel("Delete All:     ");
    JTextField text2 = new JTextField();
    JButton button2 = new JButton("Delete Magazine");
    bottomPanel.add(label2, BorderLayout.LINE_START);
    bottomPanel.add(text2, BorderLayout.CENTER);
    bottomPanel.add(button2, BorderLayout.LINE_END);

    northPanel.add(topPanel, BorderLayout.NORTH);
    northPanel.add(centerPanel, BorderLayout.CENTER);
    northPanel.add(bottomPanel, BorderLayout.SOUTH);

    //Frame
    frame.add(northPanel);
    frame.setSize(600, 400);
    frame.setVisible(true);

   }


}

这是我的方法

      public class MagazineList {
      private MagazineNode list;

      public MagazineList(){
           list=null;
      }
      public void insert (Magazine mag){
    MagazineNode node = new MagazineNode(mag);
    node.next = list;
    list = node;
  }
      public void add (Magazine mag){
           MagazineNode node = new MagazineNode (mag);
           MagazineNode current;

           if(list==null)
                list = node;
           else
           {
                current = list;
                while(current.next !=null)
                     current = current.next;
                current.next = node;
            }
    }

    public void DeleteNode(Magazine mag)
    {
        if(list == null) throw new RuntimeException("Cannot delete, Empty List");

        if( list.magazine.equals(mag) )
        {
            list = list.next;
            return;
        }

        MagazineNode cur  = list;
        MagazineNode prev = null;

        while(cur != null && !cur.magazine.equals(mag) )
        {
            prev = cur;
            cur = cur.next;
        }

        if(cur == null) throw new RuntimeException("Cannot delete, not in list");

        //delete cur node
        prev.next = cur.next;
    }

    public String toString(){
        String result ="";

        MagazineNode current = list;

        while (current !=null){
            result += current.magazine + "\n";
            current = current.next;
        }

        return result;
    }

    private class MagazineNode {
        public Magazine magazine;
        public MagazineNode next;

        public MagazineNode(Magazine mag){
            magazine = mag;
            next = null;
        }
    }   
}
4

1 回答 1

0

如果在头部插入节点,则不需要遍历列表。您的list变量是链表的头部,因此让您的新节点指向它并使其成为头部。

/**
 * Add a new node containing the input Magazine to the front of the linked list.
 *
 * @param mag A magazine to put at the head of the list.
 */
public void add (Magazine mag){
    MagazineNode node = new MagazineNode(mag);
    node.next = list;
    list = node;
}

您可能希望将名称更改listhead. 请注意,这不需要任何if语句。顺便说一句,您不必显示 GUI 代码。

于 2013-05-11T02:19:49.673 回答