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");    
    }

以下のクラスは私のデータベースクラスであり、removeメソッドがあり、それを上記の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クラスであり、returnメソッドがあります

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";
    }
  }

Addクラスでは、ユーザーを追加できます。

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

追加したユーザーをデータベースから削除したいのですが、文字列を削除クラスに渡したので、なぜそれを取得しないのかわかりません。

4

2 に答える 2

0

私はなんとか正解しました、私はユーザーのIDの代わりにUserオブジェクトでそれを呼んでいました

 User u =  db.getUser(userID.getText());             
  db.removeUser(userID.getText()); 
于 2012-03-28T15:36:07.887 に答える
0

Javaコード規約、特にフィールドとメソッドが小文字で始まる方法に関する規則に従うようにしてください。それはあなたのコードをずっと読みやすくするでしょう。

また、質問をより明確に定式化するようにしてください。正確に何が機能していないのですか?エラーメッセージとは何ですか、または予想される動作と実際の動作は何ですか?

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

最初の行は一般的に間違っています(「=ユーザー」はどういう意味ですか?)しかし、もっと重要なことは:

    public boolean removeUser(String useridln) 

mothodは、ユーザーオブジェクトではなく文字列を想定しているため、代わりにuserID.getText()を渡すと機能するはずです。

これはあなたの問題でしたか?「検索値の削除」とおっしゃっていますが、検索フィールドが表示されません。

于 2012-03-28T07:37:59.397 に答える