我有两个JFrames
。
AddSongFrame
通过jTextFields
接收用户输入,MusicPlayerandLibraryForm
使用用户输入更新jList
。
但是,我在向jList
中添加元素时遇到了问题。在生产线上
MusicPlayerAndLibraryForm mplf = new MusicPlayerAndLibraryForm();
似乎JFrame
没有更新jList
.它清除jList
,然后将songName
添加到jList
。
如何以用户访问其他jFrame
时不清除jList
的方式访问JFrame
?
public class AddSongFrame extends javax.swing.JFrame {
ArrayList<Song> songs = new ArrayList<Song>();
ArrayList<Song> songFileLibrary = new ArrayList<Song>();
DefaultListModel dlm = new DefaultListModel();
int currentIndex = 0;
public AddSongFrame() {
initComponents();
}
private void jButtonBrowseFilesActionPerformed(java.awt.event.ActionEvent evt) {
JFileChooser fileBrowser = new JFileChooser();
fileBrowser.showOpenDialog(null);
File f = fileBrowser.getSelectedFile();
String fileName = f.getAbsolutePath();
jTextFieldFileName.setText(fileName);
}
private void jButtonAddSongActionPerformed(java.awt.event.ActionEvent evt) {
String fileName = jTextFieldFileName.getText();
String songName = jTextFieldSongName.getText();
String songGenre = jTextFieldSongGenre.getText();
String songArtist = jTextFieldArtist.getText();
Song song = new Song(songName, fileName, songGenre, songArtist);
Song songFiles = new Song(fileName,songName, songGenre,songArtist);
songs.add(song);
songFileLibrary.add(songFiles);
updatejListMusicLibrary();
}
private void updatejListMusicLibrary()
{
MusicPlayerAndLibraryForm mplf = new MusicPlayerAndLibraryForm();
MusicPlayerAndLibraryForm.getjListMusicLibrary().setModel(dlm);
mplf.setDlmMain(dlm);
this.setVisible(false);
mplf.setVisible(true);
}
您的问题很可能在这里:
MusicPlayerAndLibraryForm mplf = new MusicPlayerAndLibraryForm();
每次单击JButton
时都会调用它,并且每次都会创建一个MusicPlayerAndLibraryForm
的新实例。
您只需要创建一次此类的实例,然后使用该实例更新JList
,但是此行:
MusicPlayerAndLibraryForm.getjListMusicLibrary()
告诉我getjListMusicLibrary()
是一种static
方法,并显示程序中的设计问题。
但是,正如我在上面的评论中已经说过的那样,避免使用多个 JFrames 并使用Dialogs
或CardLayout
来询问用户信息,然后使用它来更新JFrame
中JList
的单个实例。正如我所说,还要避免扩展 JFrame 并在您的类中创建它的实例。
你可以使列表成为静态的,然后在你的JFrame类中创建一个方法,当在JFrame中按下按钮或任何其他东西时,该方法调用静态列表并添加到其中。
希望这有帮助.....