Java JScrollPanes为空,尽管输入数组和DefaultListModels不为空
好的,所以我尝试创建两个单独的JScrollPane,它包含两个列表;一个用户列表和一个书籍列表,并简单地呈现它们。现在的问题是,我的bookData数组中有19个项目,userData数组中有15个项目,但我的两个JScrollPane都和我的钱包一样空 当用getSize检查我的DefaultListModels时,我看到它们的大小也是15和19。我觉得我错过了一些重要的东西。百万美元的问题是什么 !!-编辑: 刚刚注意到最奇怪的行为 我的列表本身并不是空的——这是窗口在开始时的样子 但是,这是一个转折点!只要我通过拖动角来改变窗口的大小,我的列表就会出现!因此,错误不在列表中,而在图形中,我认为:三, 这就是我的方法的样子Java JScrollPanes为空,尽管输入数组和DefaultListModels不为空,java,swing,jscrollpane,jlist,Java,Swing,Jscrollpane,Jlist,好的,所以我尝试创建两个单独的JScrollPane,它包含两个列表;一个用户列表和一个书籍列表,并简单地呈现它们。现在的问题是,我的bookData数组中有19个项目,userData数组中有15个项目,但我的两个JScrollPane都和我的钱包一样空 当用getSize检查我的DefaultListModels时,我看到它们的大小也是15和19。我觉得我错过了一些重要的东西。百万美元的问题是什么 !!-编辑: 刚刚注意到最奇怪的行为 我的列表本身并不是空的——这是窗口在开始时的样子 但是,
public void newLoan(){
StringBuilder sb = new StringBuilder();
StringBuilder string = new StringBuilder();
JLabel userLabel;
JLabel bookLabel;
JButton btnRegister;
// Build a string of all users, separated with a "–"
for (int i = 1; i < Processes.userList.size()+1; i++) {
sb.append(Processes.userList.get(i).getFirstname()+" "+Processes.
userList.get(i).getSurname()+", "+Processes.userList.
get(i).getPersonalID()+"–");
System.out.println(Processes.userList.get(i).getFirstname()+" "+Processes.
userList.get(i).getSurname()+", "+Processes.userList.
get(i).getPersonalID());
}
// Build a string of all books, separated with a "–"
for (int i = 1; i < Processes.bookList.size()+1; i++) {
if (Processes.bookList.get(i).getAvailable()-
Processes.bookList.get(i).getOnLoan()!=0) {
string.append(Processes.bookList.get(i).getAvailable()-
Processes.bookList.get(i).getOnLoan()+" available - "+
Processes.bookList.get(i).getTitle()+" by "+Processes.
bookList.get(i).getAuthor_firstname()+" "+Processes.
bookList.get(i).getAuthor_surname()+" ("+Processes.
bookList.get(i).getIsbn()+")–");
System.out.println(Processes.bookList.get(i).getAvailable()-
Processes.bookList.get(i).getOnLoan()+" available - "+
Processes.bookList.get(i).getTitle()+" by "+Processes.
bookList.get(i).getAuthor_firstname()+" "+Processes.
bookList.get(i).getAuthor_surname()+" ("+Processes.
bookList.get(i).getIsbn());
}
}
// split sb at the "–"'s and fill an array.
String[] userData = sb.toString().split("–");
System.out.println(userData.length);
// split string at the "–"'s and fill an array.
String[] bookData = string.toString().split("–");
System.out.println(bookData.length);
/* Defining sizes and locations and initializing all variables. Also
* defining text on buttons and labels.*/
DefaultListModel userModel = new DefaultListModel();
for (int i = 0; i < userData.length; i++) {
userModel.addElement(userData[i]);
}
System.out.println(userModel.getSize());
final JList userJList = new JList();
userJList.setModel(userModel);
JScrollPane userList = new JScrollPane(); //f*cking JScrollPane! Work!
userList.setViewportView(userJList);
DefaultListModel bookModel = new DefaultListModel();
for (int i = 0; i < bookData.length; i++) {
bookModel.addElement(bookData[i]);
}
System.out.println(bookModel.getSize());
final JList bookJList = new JList();
bookJList.setModel(bookModel);
JScrollPane bookList = new JScrollPane();
bookList.setViewportView(bookJList);
userLabel = new JLabel("Select user to register loan onto:");
userLabel.setSize(250,20);
userLabel.setLocation(20, 50);
userList.setSize(150, 200);
userList.setLocation(70, 80);
bookList.setSize(150, 200);
bookList.setLocation(400, 80);
btnRegister = new JButton("Register loan");
btnRegister.setSize(150,50);
btnRegister.setLocation(235, 300);
// Adding functionality... Later
// Adding the different components to the panel "newLoan".
newLoan.add(userLabel);
newLoan.add(userList);
newLoan.add(bookList);
newLoan.add(btnRegister);
}
但这显然不起作用。解决方案极其复杂。在每个列表的方法之外添加了私有DefaultListmodel,并将所有内容作为元素添加到这些模型中。最后,但并非最不重要的是,我使用
newLoan.repaint();
作为参考,这里有一个完整的,显示多个滚动列表的工作。不是100%确定,但你可能想尝试避免设置大小和位置。使用布局管理器。看见
newLoan.repaint();