我正在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");
}
}
答案 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());
我没有对它进行过测试,但它应该有效。