2012-03-28 3 views
0

Класс ниже - это мой класс удаления, я хочу удалить пользователей из базы данных, у меня есть класс класса Add и Search, их доля равна той же базе данных private Database db;.Невозможно удалить искомое значение

package TakeMeOut; 
import java.awt.BorderLayout; 
import java.awt.FlowLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextArea; 
import javax.swing.JTextField; 


public class Delete extends JFrame implements ActionListener 


{ 

    /** {@link JTextField} where the user number is entered */ 
    private JTextField userID = new JTextField(7); 

    /** {@link JTextArea} for the client information */ 
    private JTextArea information = new JTextArea(5, 39); 

    /**{@link JButton} Search button */ 
    private JButton Deleteuser = new JButton("Delete"); 

    /** 
    * Default constructor. Create a new search panel with a {@link JTextField} for client ID and a {@link JTextArea} for detailed 
    * information on the client.. 
    */ 
    private Database db; 

    public Delete(Database db) 
     { this.db = db; 

     setLayout(new BorderLayout()); 
     setSize(450, 250); 
     setTitle("Delete Client"); 

     /** dispose of the window when the close button is clicked*/ 
     setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 

     JPanel top = new JPanel(); 

     /** add the veritable of JButton to the top panel*/ 
     top.add(Deleteuser); 
     /**add the bottom panel to the bottom of the screen*/ 
     add("North", top); 

     top.add(new JLabel("Enter Client Number:")); 
     top.add(userID); 
     add("North", top); 

     JPanel middle = new JPanel(); 
     middle.setLayout(new FlowLayout()); 
     middle.add(information); 
     add("South", middle); 

     /** do not allow enduser to set the size of the screen*/ 
     //setResizable(false); 
     setResizable(false); 
     setVisible(true); 


     // listen to the button 
     Deleteuser.addActionListener(this); 
    } 

    /** 
    * delete user from database when the delete button is clicked 
    */ 
    @Override 
    public void actionPerformed(ActionEvent e) { 

     User u = (userID.getText()); 
     db.removeUser(u); 

     information.setText(u.toString() + " has been deleted");  
    } 

класс ниже мой класс базы данных, который имеет метод удалить и я пытаюсь передать его через к Delete класса выше.

import java.util.*; 
public class Database 
{/**    
    * 
    * Map of users keyed on userId    
    */ 
    Map <String, User> users; 


    /** @Database   
    * the empty map which would be used to collect the users.      
    */ 
    public Database() 
{  
     users = new HashMap<String, User>(); 

} 



    /** 
    * Type for checking users 
    */ 
    public static void main(String [] args){ 
      new Database(); 
      }  

    /** check if the UserID is already in use if so return false, else 
    * add key pair to the Map. 
    * USERID will be key of map 
    *  @ 
    */ 
    public boolean addUser(User userIn) 
    { 

     String keyIn = userIn.getUSERID(); 
     if (users.containsKey(keyIn)) 
     { 
      return false; 
     } 
     else 

     { 
      users.put(keyIn, userIn); 
      return true; 
     } 
    } 



    /** 
    * @param remove the user with the given useridIn, from the Map 
    * check if user was removed and does not equal to no null 
    * @return If the user is not removed return false 
    * 
    * */ 
    public boolean removeUser(String useridln) 
    { 
     if (users.remove(useridln)!= null) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 

    /** 
    * return the number of users in the Map collection 
    * 
    * 
    * */ 
    public int getTotalNumberOfUsers() 
    { 
     return users.size(); 
    } 


    /** return the user with the given userid or null if no such user 
    * */ 
    public User getUser (String useridIn) 
    { 
     return users.get(useridIn); 
    } 



    /** return the set of users in the collection 
    * set is used to store the set of users and to get the set of keys. 
    * iterate through the keys and put each value in the userSetn and return the set of users 
    * 
    * 
    * */ 
    public Set<User> getAllUsers() 
    { 

     Set<User> userSet = new HashSet<User>(); 
     Set<String> theKeys = users.keySet(); 

     for (String userid : theKeys) 
     { 
      User theUser = users.get(userid); 
      userSet.add(theUser); 
     } 
     return userSet; 


     } 

    public String toString(){ 

     return users.toString(); 
    } 
} 

класс ниже мой класс User, с помощью методов возврата

public class User { 

    /**declared attributes */ 
    private String username; 
    private String gender; 
    private String age; 
    public String userid; 

    /** User constructor with four types of string objects and the declared methods */ 
     public User(String usernameIn, String genderIn, String ageIn, String useridIn) { 

    /* declared methods*/ 
     username = usernameIn; 
     gender = genderIn; 
     age = ageIn; 
     userid = useridIn; 
    } 

     /** 
     * 
     * @return 
     */ 
    public String getUsername() { 
     return username; 
    } 

/** 
* 
* @return 
*/ 
    public String getGender() { 
     return gender; 
    } 

    /** 
    * 
    * @return 
    */ 
    public String getAge() { 
     return age; 
    } 

    /** 
    * 
    * @return 
    */ 
    public String getUSERID() { 
     return userid; 
     } 


    /** 
    * ToString return the customized values 
    */ 
    public String toString() 
    { 
     return"  "+ username +"  " + gender + "  " + age + " \n"; 
    } 
    } 

ВДобавления класса я могу добавить пользователей.

User u = new User(Inputusername.getText(), selection , age.getText(), inputuserid.getText()); 
db.addUser(u); 

Я хотел бы, чтобы удалить добавленный пользователя из базы данных, но я не знаю, почему его не принимать его, как я есть передать строку в классе удаления.

+0

Добро пожаловать на ТАК! 1) Пожалуйста, используйте форматирование кода для вывода, фрагментов кода и кода. 2) Чтобы получить более эффективную помощь, опубликуйте [SSCCE] (http://sscce.org/). 3) 'public class Delete extends JFrame' должен, скорее всего, расширять' JDialog'. –

+0

привет спасибо, но у меня есть это в коде, его просто, что я не могу удалить то, что я добавил. да, это будет иметь в виду в следующий раз –

+0

* «Да, это будет иметь в виду в следующий раз» * На этот раз вы можете отредактировать свой вопрос. В противном случае я буду отвечать на ответ - в следующий раз. –

ответ

0

Пожалуйста, попробуйте следовать Java Code Conventions, особенно правила о том, как поля и методы начинаются с строчной буквы. Это сделает ваш код намного легче читать.

Кроме того, постарайтесь сформулировать свой вопрос более ясным. Что именно не работает? Каковы сообщения об ошибках или каково ожидаемое поведение против фактического поведения?

User u = User db.getUser(userID.getText());    
    db.removeUser(u);  

Первая линия швов неправильно в целом (что означает "= Пользователь" означает?) Но что еще важнее:

public boolean removeUser(String useridln) 

Mothod ожидает строку, а не пользовательский объект, поэтому он должен работать, если вы передадите userID.getText().

У вас возникли проблемы? Я не уверен, поскольку вы также упоминаете «удаление искомого значения», но я не вижу поля поиска.

+0

спасибо mate его моя вина не делает себя достаточно ясно, но спасибо –

+0

@Mohammed Ali не проблема. Если на ваш вопрос ответили, вы можете принять ответ, нажав «контрольный знак» слева (как описано [здесь] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an- ответ-работа)). Кроме того, на самом деле не обязательно отправлять ответ самостоятельно, если на ваш вопрос уже был дан ответ;) – tim

0

мне удалось правильно, я звала его с объектом пользователя вместо идентификатора пользователя

User u = db.getUser(userID.getText());    
    db.removeUser(userID.getText());