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

时间:2018-03-15 17:44:42

标签: java swing jframe

我有两个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);
    }

2 个答案:

答案 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并使用DialogsCardLayout来询问用户信息,然后使用它来更新{的单个实例static中的{1}}。正如我所说,也避免extending JFrame并在你的班级内创建一个实例。

答案 1 :(得分:-3)

您可以将列表设置为静态,然后在JFrame类中创建一个方法,该方法调用静态列表并在JFrame中按下按钮或任何其他内容时添加到该方法中...

希望这有助于......