java—访问gui文件中的示例,而示例在另一个文件中声明

lqfhib0f  于 2021-06-30  发布在  Java
关注(0)|答案(3)|浏览(352)

我在学oop Java . 我先解释我的问题,代码如下。我有3个独立的文件(user.java、usergui.java和userstart.java)。
java的代码包含带有默认getter和setter的user类。usergui.java只存在于创建gui的项中。java的代码包含运行程序的main。
现在我尝试在 JList 在usergui.java中,我想在 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");
    }
}
zfycwa2u

zfycwa2u1#

简单的方法(这就足够了)是在构造时将“数据”传递给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与数据解耦。

uqjltbpv

uqjltbpv2#

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

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());

我还没测试过,但应该能用。

suzh9iv8

suzh9iv83#

例如,在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
}

相关问题