0

我有两个程序,每个程序都在一个小程序中创建一个不同的选项卡,用户可以在一个选项卡中输入宠物类型,然后在另一个选项卡中选择并添加或删除宠物类型到列表中。我以为我已经设法解决了所有问题,但现在两者都给了我java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. 我似乎无法弄清楚为什么我会收到这些错误。这是两个代码。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;

public class CreatePanel extends JPanel
 {
   private Vector petList; //Instantiation of variables.  To save space, multiple variables
   private JButton button1; //were instantiated at a time when possible, such as the panels.
   private SelectPanel sPanel;
   private JLabel text1, redText;
   private JTextField petInput;
   private JTextArea petsIn;
   private Panel wPanel, alertPanel, petPanel, createPanel;



 public CreatePanel(Vector petList, SelectPanel sPanel)
  {
    this.petList = petList;
    this.sPanel = sPanel;


    // orgranize components here
    // here is an example
    setLayout(new GridLayout(1,2));

    text1 = new JLabel("Enter a Pet Type"); //Creation of the visible portions of the applet
    petInput = new JTextField();
    button1 = new JButton("Create a Pet");
    petsIn = new JTextArea("No Pet");
    wPanel = new Panel(); //Panels have to be used to ensure the porper layout of the
    petPanel = new Panel();  //applet so it conforms to assignment specifications
    createPanel = new Panel();  //making for a pretty panel, but some very ugly code
    alertPanel = new Panel();
    alertPanel.setLayout(new GridLayout(1,2));
    createPanel.setLayout(new GridLayout(2,3));
    petPanel.setLayout(new GridLayout(1,2));  //Each panel has its own layout, making for layouts
    wPanel.setLayout(new GridLayout(3,1));  //in layouts to get everything looking correct.
    button1.addActionListener(new ButtonListener()); //adds the listener to the button

    add(wPanel);
    wPanel.add(alertPanel);
    alertPanel.add(redText);
    wPanel.add(petPanel);
    petPanel.add(text1);
    petPanel.add(petInput);
    wPanel.add(createPanel);
    createPanel.add(new JLabel());
    createPanel.add(button1);
    createPanel.add(new JLabel());  //Have to create several blank labels to get position of
    createPanel.add(new JLabel());  //the create pet button to be positioned correctly.
    createPanel.add(new JLabel());
    createPanel.add(new JLabel());
    add(petsIn);


  }

  private class ButtonListener implements ActionListener
   {
    public void actionPerformed(ActionEvent event)
     {
         String inputPet = petInput.getText(); //Gets the user input pet
         boolean checker = false; // A boolean check type so pets can't be added repeatedly

         for (int p = 0; p < petList.size(); p++){ //Runs a check through the petList vector
             if (inputPet.equalsIgnoreCase((String) petList.get(p))){ //If a pet already exists (ignoring case) then the check is set to true
                 checker = true; //for a later if loop to inform the user.
                 break;
             }
         }


         if(inputPet.equals("")){
             redText.setText("Please enter a pet type.");
             redText.setForeground(Color.red);
         } else if (checker == true){
             redText.setText("The pet type already exists.");
             redText.setForeground(Color.red);
         } else {
             petList.add(inputPet);
             String addedPets = (String) petList.get(0);
             for(int i = 1; i < petList.size(); i++){
                 addedPets += "\n" + (String) petList.get(i);
             }
             redText.setText("Pet type added.");
             redText.setForeground(Color.red);
             petsIn.setText(addedPets);
             sPanel.updateUI();
         }
         redText.setText("");

     } //end of actionPerformed method
  } //end of ButtonListener class

} //end of CreatePanel class

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.*;

public class SelectPanel extends JPanel
 {
   private Vector petList, selectList;
   private Panel bPanel, nPanel;
   private JLabel sPets, aPets, nPets;
   private int numPets = 0;
   private JButton addPet, remove;
   private JList petsAvail, petTypes;
   private JScrollPane sPane, sPane2;

   public SelectPanel(Vector petList)
     {
      this.petList = petList;

      this.setLayout(new BorderLayout());

      bPanel = new Panel();
      nPanel = new Panel();
      nPanel.setLayout(new GridLayout(1,2));
      bPanel.setLayout(new GridLayout(2,1));

      petTypes = new JList(petList);
      petTypes.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
      sPane = new JScrollPane(petTypes);
      petList.add(0, "Available pet(s)");

      selectList = new Vector();
      petsAvail = new JList(selectList);
      petsAvail.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
      sPane2 = new JScrollPane(petsAvail);
      selectList.add(0, "Selected pet(s)");

      aPets = new JLabel("Available pet(s)");
      nPets = new JLabel("Selected pet(s)");
      nPets = new JLabel("The number of selected pets:" + numPets);
      addPet = new JButton("Add");
      remove = new JButton("Remove");

      add(petsAvail, BorderLayout.EAST);
      add(petTypes, BorderLayout.WEST);
      add(nPanel, BorderLayout.SOUTH);
      nPanel.add(nPets);
      add(bPanel, BorderLayout.CENTER);
      bPanel.add(addPet);
      bPanel.add(remove);

      addPet.addActionListener(new ButtonListener());
      remove.addActionListener(new ButtonListener());


     // orgranize components for the panel
  }

 public void updatePetList()
  {
        petTypes.updateUI();
        petsAvail.updateUI();
        //This method can refresh the appearance of the list of pets
        //by calling updateUI() method for the JList.
        //It can be called from the CreatePanel class whenever a new pet type
        //is added to the vector and the JList appearence needs to be refreshed.
  }

 private class ButtonListener implements ActionListener
  {
       public void actionPerformed(ActionEvent event)
        {
            Object which = event.getSource();

            if(which == addPet){
                for (int p = 1; p < selectList.size(); p++){
                    boolean check = false;

                    if(selectList.contains(petTypes.getSelectedValue())){
                        check = true;
                        break;
                    } else if(check == false){
                        selectList.addElement(petTypes.getSelectedValue());
                        petsAvail.updateUI();
                        numPets++;
                    }
                }
            } else if (which == remove){
                selectList.removeElement(petsAvail.getSelectedValue());
                updatePetList();
                numPets--;
            }



            //When the added button is pushed, the selected pet
            //should be added to the right list and the number of
            //selected pets is incremented by 1.
            //When the remove button is pushed, the selected pet
            //should be removed from the right list and the number of
            //selected pets is decremented by 1.
            //
            //Be careful for the cases when no item has been selected.
        }
  } //end of ButtonListener class

} //end of SelectPanel class

任何有关这些错误的原因以及如何处理它们的见解将不胜感激。

4

1 回答 1

1

您收到该警告是因为您使用的是泛型类而未指定泛型类型。看起来您的 petList 向量应该是字符串的向量。您的 petList 声明应如下所示

private Vector<String> petList

然后在某个地方...

petList = new Vector<String>()

该警告旨在帮助您意识到,如果您在向量中开始混合类型(通常是偶然的),您的代码在运行时可能无法按预期运行。即使您真的只想要字符串,您也可以在技术上将多种类型的对象添加到您的 petList 向量中。没有什么能阻止您将整数、其他类甚至更多向量添加到向量中。有时这是由程序员故意完成的,但大多数时候你真的只希望在你的泛型类中可以使用一种类型的对象(在这种情况下是向量)。通过指定要放入向量中的对象类型,编译器可以帮助您捕捉这些意外混合的类型(例如,如果您试图将整数放入您的 petList 向量中)。它'

阅读此处以了解有关 Java 中的泛型的更多信息:http: //docs.oracle.com/javase/tutorial/java/generics/

于 2013-02-22T18:38:43.193 回答