2013-02-22 68 views
0

我有兩個程序,每個在一個小程序中創建一個不同的選項卡,用戶可以在一個選項卡中輸入寵物類型,然後選擇並添加或刪除寵物類型在其他選項卡中列出。我以爲我已經設法解決所有問題,但現在都給我java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. 我似乎無法弄清楚爲什麼我收到這些錯誤。這是兩個代碼。與JLists和載體的兩個未經檢查或不安全的操作案例

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 

任何有識之士爲這些錯誤的原因和如何處理它們會受到歡迎。

回答

1

由於您使用的是泛型類而沒有指定泛型,因此您會收到該警告。它看起來像你的寵物列表矢量應該是一個字符串的矢量。你petList的聲明應該像

private Vector<String> petList 

某處後...

petList = new Vector<String>() 

這一警告的目的是幫助你認識到,在運行時預期的,如果你開始混合類型的代碼可能不會表現(通常是意外)在你的矢量內。即使你真的只想要字符串,你也可以在技術上將多種類型的對象添加到你的petList向量中。沒有什麼能阻止你將整數,其他類或甚至更多的向量添加到你的向量中。有時候這是由程序員有目的地完成的,但大多數情況下,你真的只希望在你的泛型類中使用單一類型的對象(在這種情況下是向量)。通過指定要放入向量的對象類型,編譯器可以幫助您捕獲這些類型的意外混合(例如,如果您嘗試將整數放入您的petList向量中)。在編譯時修復這些問題要容易得多,而不是試圖弄清楚運行時出了什麼問題。

這裏閱讀更多地瞭解泛型在Java中: http://docs.oracle.com/javase/tutorial/java/generics/

+0

添加所有矢量用途(包括在第三文件)擺脫上的所有文件的警告,除了選擇面板文件 – eevpix 2013-02-22 18:53:25

+0

哦天哪,我會聽起來很愚蠢。我忘了在createPanel方法中實例化'redText'JLabel。這就是爲什麼它沒有運行。 – eevpix 2013-02-22 18:56:57

相關問題