1

我正在学习 OOP Java。我将首先解释我的问题,代码如下。我有 3 个单独的文件(User.java、UserGUI.java 和 UserStart.java)。

User.java 的代码包含带有默认 getter 和 setter 的 User 类。UserGUI.java 仅存在于创建 GUI 的项目之外。UserStart.java 具有包含运行程序的主要代码。

现在我试图JList在 UserGUI.java 中选择一个用户 ID,我想在JTextField下面的JList.

用户实例是在 UserStart.java 中创建的,我很难过如何在 UserGUI.java 中访问它们......

有没有人想帮我解决这个问题?先感谢您!

下面是 User.java 的类:

public class User {

    private String userId;
    private String surname;
    private String name;

    public User(String userId, String surname, String name) {
        this.userId = userId;
        this.surname = surname;
        this.name = name;
    }

    public String getuserId() {
        return userId;
    }

    public void setuserId(String userId) {
        this.userId = userId;
    }

    public String getsurname() {
        return surname;
    }

    public void setsurname(String surname) {
        this.surname = surname;
    }

    public String getname() {
        return name;
    }

    public void setname(String name) {
        this.name = name;
    }
}

下面是来自 userGUI.java 的一段代码:

final JList<?> userList= new JList<Object>(addresses);
    userList.addListSelectionListener(new ListSelectionListener() {
        public void valueChanged(ListSelectionEvent e) {
            if(!e.getValueIsAdjusting()) {
                String userId = (String) userList.getSelectedValue();
                System.out.println(userId);
            }
        }
    });

JTextField userText = new JTextField(10);
userText.setEditable(false);

下面是文件 UserStart.java:

public class UserStart {
    public static void main(String[] args) {
        String userId, surname, name;
        String[] userIds = {"a206", "a207", "a208", "a209"};

        User u1 = new User(userIds[0], "a", "w");
        User u2 = new User(userIds[1], "b", "x");
        User u3 = new User(userIds[2], "c", "y");
        User u4 = new User(userIds[3], "d", "z");
    }
}
4

3 回答 3

1

例如,在 User.java 类中,您可以创建一个包含所有用户的静态 verctor(在构造函数中添加每个用户):

    import java.util.Vector;
    public class User {

        private String userId;
        private String surname;
        private String name;
        public static Vector<User> users=new Vector<User>();

        public User(String userId, String surname, String name){
        this.userId=userId;
        this.surname=surname;
        this.name=name;

        User.users.add(this);
        }

   }

然后您可以访问任何类中的任何已创建用户,如下所示:

User.users.get(i).getname();

根据您的问题,您应该以某种方式记下索引。第一个创建的用户将是 0:users.get(0),第二个将是 1,依此类推

例如,如果你想显示所有用户,那么在这样的循环中:

String name=null, surname=null;

for(int i=0;i<User.users.size();i++){
    name=User.users.get(i).getname();
    surname=User.users.get(i).getsurname();
    //do something with you data before moving to next user
}
于 2013-06-05T22:39:44.373 回答
1

简单的方法(就足够了)是在构建时将“数据”传递给 GUI

class UserGui
{
    private User[] user;

    public UserGui(User[] users)
    {
        this.user = user;

        initializeComponents();
    }

    // ...
}

然后在你的主要

public static void main(String[] args)
{
    User[] user = new User[10];

    // setup user array ...

    UserGui gui = new UserGui(user);
}

对于更大更复杂的程序/应用程序,您应该考虑使用MVC作为一种允许您将 UI 与数据分离的方法。

于 2013-06-05T22:40:49.113 回答
0

首先,您的构造函数应该与类同名。像这样的东西:

public User(String userId, String surname, String name) {
    this.userId = userId;
    this.surname = surname;
    this.name = name;
}

如果要将文本添加到JTextBox

如果您有 1 个文本框:

textbox1.setText(""+userList.getSelectedValue().getName() + ""+userList.getSelectedValue().getSurname())

如果你有 2 个:

textbox1.setText(""+userList.getSelectedValue().getName());
textbox2.setText(""+userList.getSelectedValue().getSurname());

我还没有测试过,但它应该可以工作。

于 2013-06-05T22:45:30.317 回答