我有两个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);
}
答案 0 :(得分:1)
你的问题很可能在这里:
<logger name="consoleOnly" additivity="false">
<level value="ALL" />
<appender-ref ref="Console" />
</logger>
每次点击MusicPlayerAndLibraryForm mplf = new MusicPlayerAndLibraryForm();
时都会调用此选项,并且每次都会创建JButton
的新实例。
您只需要创建一次此类的实例,然后使用该实例更新MusicPlayerAndLibraryForm
,但是这一行:
JList
告诉我MusicPlayerAndLibraryForm.getjListMusicLibrary()
是一种getjListMusicLibrary()
方法,并在您的计划中显示设计问题。
但正如我在上面的评论中已经说过的那样,请避免使用the use of multiple JFrames并使用Dialogs
或CardLayout
来询问用户信息,然后使用它来更新{的单个实例static
中的{1}}。正如我所说,也避免extending JFrame并在你的班级内创建一个实例。
答案 1 :(得分:-3)
您可以将列表设置为静态,然后在JFrame类中创建一个方法,该方法调用静态列表并在JFrame中按下按钮或任何其他内容时添加到该方法中...
希望这有助于......