在实例在另一个文件中声明时访问GUI文件中的实例

时间:2013-06-05 22:29:52

标签: java swing class oop instance

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

User.java包含包含User类的代码,其中包含默认的getter和setter。 UserGUI.java仅存在于创建GUI的项目之外。 UserStart.java包含运行程序的main的代码。

现在我正在尝试在UserGUI.java中的JList中选择一个UserID,我想在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");
    }
}

3 个答案:

答案 0 :(得分:1)

例如,在User.java类中,您可以创建一个静态验证器,其中创建了所有用户(在构造函数中添加每个用户):

    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
}

答案 1 :(得分: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与数据分离。

答案 2 :(得分: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());

我没有对它进行过测试,但它应该有效。