如何从另一个 JFrame 更新和添加到 JList



我有两个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 并使用DialogsCardLayout来询问用户信息,然后使用它来更新JFrameJList的单个实例。正如我所说,还要避免扩展 JFrame 并在您的类中创建它的实例。

你可以使列表成为静态的,然后在你的JFrame类中创建一个方法,当在JFrame中按下按钮或任何其他东西时,该方法调用静态列表并添加到其中。

希望这有帮助.....

最新更新