我有两个程序,每个程序在applet中创建一个不同的选项卡,用户可以在一个选项卡中输入宠物类型,然后在另一个选项卡中选择并添加或删除宠物类型到列表。我以为我已经成功解决了所有问题,但两人现在都给了我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
我们将非常感激地了解这些错误的原因以及如何应对这些错误。
答案 0 :(得分:1)
您收到该警告是因为您使用的是泛型类而未指定泛型类型。看起来你的petList向量应该是字符串的向量。 petList的声明应该是
private Vector<String> petList
以后某个地方......
petList = new Vector<String>()
该警告旨在帮助您意识到,如果您在向量中开始混合类型(通常是意外),您的代码可能在运行时可能无法按预期运行。您可以在技术上将多种类型的对象添加到petList向量中,即使您真的只需要字符串。没有什么可以阻止你在你的向量中添加整数,其他类,甚至更多的向量。有时这是由程序员有目的地完成的,但大多数时候你真的只希望在你的泛型类(在这种情况下是向量)中使用单一类型的对象。通过指定要放入向量的对象类型,编译器可以帮助您捕获这些类型的意外混合(例如,如果您尝试将整数放入petList向量中)。在编译时修复这些类型的问题要容易得多,而不是试图弄清楚运行时出了什么问题。
阅读此处以了解有关Java中泛型的更多信息: http://docs.oracle.com/javase/tutorial/java/generics/