按下主 GUI 上的按钮时,编辑 GUI JDialog 不会打开,即使正确执行了步骤也是如此

Edit GUI JDialog doesn't open when button on main GUI is pressed, even if steps followed properly

我是 Java 代码的初学者,最近遇到了一个关于我的编辑 GUI JDialog 的问题。我正在做一项任务,收集 DVD 上的信息并将其添加到主 GUI 的 JList 中。虽然到目前为止一切似乎都在工作,但唯一的问题是编辑 GUI。用户需要在主 GUI 的 JList 中 select 和 object,然后单击编辑按钮为用户打开 JDialog,然后编辑驻留在 Object 中的信息。这是行不通的,并且一直说用户必须在 JList 中 select 一个 object 才能编辑,即使用户已经或没有 select 编辑 object .

我在下面提供了我的所有代码:

主界面:

public class DVDGUI extends javax.swing.JFrame {

    private DVDCollection dvdcollection = new DVDCollection();
    public DVDGUI() {
        initComponents();
        loadData();
    }

    private void loadData()
    {
        try
        {
            ObjectInputStream infile = new ObjectInputStream(new FileInputStream("heatherdunne.txt"));
            dvdcollection = (DVDCollection)infile.readObject();
            infile.close();
            updateDVDList();
        }
        catch (Exception e)
        {
            JOptionPane.showMessageDialog(this,"Error found - " + e);
        }
    }

    public void saveData()
    {
        try
        {            
            ObjectOutputStream outfile = new ObjectOutputStream(new FileOutputStream("heatherdunne.txt"));
            outfile.writeObject(dvdcollection);
            outfile.close();
            System.exit(0);
        }
        catch (Exception e)
        {
               JOptionPane.showMessageDialog(this,"Error writing file - " + e);        
        }
    }

    @SuppressWarnings("unchecked")
    private void lstDVDsValueChanged(javax.swing.event.ListSelectionEvent evt) {                                     
        if (lstDVDs.getSelectedIndex() >= 0)
            txtDetails.setText(((DVD)lstDVDs.getSelectedValue()).getDetails());
        else
            txtDetails.setText(" ");                            

        int selectedIndex = lstDVDs.getSelectedIndex();
        ListModel lModel= lstDVDs.getModel();
        DVD item = (DVD)lModel.getElementAt(selectedIndex);
        System.out.println("Title= "+ item.getTitle());  
        boolean favourite = false;
        favourite = true;
        favourite = item.favourite;
        if (item.favourite == true)
        uebbtnFav.setSelected(true);
        else
        uebbtnFav.setSelected(false);
    }
    private void btnEditActionPerformed(java.awt.event.ActionEvent evt) {                                        
        if (lstDVDs.getSelectedIndex() >= 0)
        {
          JOptionPane.showMessageDialog(this,"You need to select a DVD to be edited");
        }
        else
        {
            DVD dvvvd = (DVD)lstDVDs.getSelectedValue();
            EditDVD idk = new EditDVD(this, dvvvd);  
        }
    }
    private void loadDVDsfromfile(){
        DVD dvd = null;
        DVD dvd2 = null;        
        DVD dvd3 = null;        
        try
        {    
            FileInputStream file = new FileInputStream("C:\Users\User\Desktop\code\Assign2\heatherdunne.txt"); 
            ObjectInputStream in = new ObjectInputStream(file); 

            dvd = (DVD)in.readObject(); 
            dvd2 = (DVD)in.readObject();             
            dvd3 = (DVD)in.readObject();             

            dvdcollection.addDVD(dvd);
            dvdcollection.addDVD(dvd2);
            dvdcollection.addDVD(dvd3);

            in.close(); 
            file.close(); 

            System.out.println("Object has been deserialized "); 
            System.out.println(dvd);
            System.out.println(dvd2);
            System.out.println(dvd3);      

        } 

        catch(IOException ex) 
        { 
            System.out.println("IOException is caught"); 
        } 

        catch(ClassNotFoundException ex) 
        { 
            System.out.println("ClassNotFoundException is caught"); 
        }                 
    }
    private void formWindowOpened(java.awt.event.WindowEvent evt) {                                  
        loadDVDsfromfile();  
        DefaultListModel lstmdl = new DefaultListModel();
        lstmdl.addElement(dvdcollection.getDVDs().get(0)); 
        lstDVDs.setModel(lstmdl);
    }                                 
    private void crtFileActionPerformed(java.awt.event.ActionEvent evt) {                                        
          DVD dvd = new DVD("Avengers: Endgame", 2019, Boolean.TRUE);
          DVD dvd2 = new DVD("Shrek 2", 2004, Boolean.TRUE);
          DVD dvd3 = new DVD("IT", 2017, Boolean.TRUE);

        try
        {    
            FileOutputStream file = new FileOutputStream("C:\Users\User\Desktop\code\Assign2\heatherdunne.txt"); 
            ObjectOutputStream out = new ObjectOutputStream(file); 

            out.writeObject(dvd); 
            out.writeObject(dvd2); 
            out.writeObject(dvd3);



            out.close(); 
            file.close(); 

            System.out.println("Object has been serialized"); 
        } 

        catch(IOException ex) 
        { 
            System.out.println("IOException is caught"); 
        }    

    }                                       
    public void updateDVDList()
    {       
        if (rbtTitle.isSelected())
            sortByTitle();
        else
                sortByID();
        lstDVDs.setListData(dvdcollection.getDVDs().toArray());
    }                                

编辑 DVD GUI

private DVD selectedDVD;
    public EditDVD(DVDGUI inParent, DVD inDVD)
    {
        super(inParent, true);          
        initComponents();
        parent = inParent;
        Title.setText(selectedDVD.getTitle());        
        Year.setText(selectedDVD.getYear() + "");
        setVisible(true);        
    }

@SuppressWarnings("unchecked")
private void EditActionPerformed(java.awt.event.ActionEvent evt) {                                     
    String title = Title.getText();
    String year = Year.getText();

    String msgTitle = DVD.checkTitle(title);
    String msgYear = DVD.checkYear(year);        

    if (msgTitle.length()>0)
        JOptionPane.showMessageDialog(this, msgTitle);
    else
    if (msgYear.length()>0)
        JOptionPane.showMessageDialog(this, msgYear);
    else    
    {
        //validation was ok
            selectedDVD.setTitle(title);
            selectedDVD.setYear(Integer.parseInt(year));
            parent.updateDVDList();
            JOptionPane.showMessageDialog(this, "Update sucessful");
            dispose();
    }
}    

DVD CLASS:

public class DVD implements Serializable
{
    private String id;     
    private String title;                                                                     
    private int year;                                                          
    boolean favourite;  
    private int nextID=1;

    public DVD(String inID, String inTitle, int inYear, boolean inFavourite)
    {
        id = inID;
        title = inTitle;
        year = inYear;
        favourite = inFavourite;
    }
    public DVD (String inTitle, int inYear, boolean inFavourite)
    {  
        id = "0";
        nextID++; 
        title = inTitle;
        year = inYear;
        favourite = inFavourite;        
    }


    public String toString()
    {
        return title;
    } 

    public String getID()
    {
        return id;
    }

    public void setID(String inID)
    {
        id = inID;
    }

    public String getDetails()
    {
        return "id(" + id + ") " + title + " <" + year + "> ";
    }

    public String getTitle()
    {
        return title;
    }

    public void setTitle(String inTitle)
    {
        title = inTitle;
    }

    public String getYear()
    {
        if (year==0)
            return " ";
        else
            return year + "";
    } 

    public void setYear(int inYear)
    {
        year = inYear;
    }

    public boolean isFavourite()
    {
        return favourite;
    }    

    public void setFavourite(boolean inFavourite)
    {
        favourite = inFavourite;
    }  

    public static String checkTitle(String inTitle)
    {
        if (inTitle.trim().length()>0)
            return "";
        else
            return "Title must have at least 1 non-blank character";
    } 

    public static String checkYear(String inYear)
    {
        Calendar now = Calendar.getInstance();  
        int currYear = now.get(Calendar.YEAR);         
        try
        {
            int year = Integer.parseInt(inYear);
            if ((year >= 1997)&&(year <= currYear))
                return ""; 
            else
                return "Year must be between 1997 and current year";
        }
        catch (Exception ex)
        {
            return "Year must be a 4 digit integer";
        }
    }

    public static String checkID(String inID)
    {
        if (inID.trim().length()>0)
            return "";
        else
            return "ID must have at least 1 non-blank character";
    } 

    public static boolean checkFavourite(boolean inFav)
    {
        boolean Favs = false;
        int total = 0;
        if ( !Favs ) 
        {
        total = total + 1;
        }
        return false;
    }
    public int compareTo(DVD d2)
    {
//        if (ID<c2.getID())
//      return -1;
//  else 
//         if (ID>c2.getID())
//          return 1;
//       else return 0;        
        return id.compareTo(d2.getID());
    }        
}

DVD收藏Class:

public class DVDCollection implements Serializable
{
    private ArrayList<DVD> dvds = new ArrayList<DVD>();
    private int nextID=1;
    public boolean addDVD(DVD inDVD)
    {   
        return 
        dvds.add(inDVD);
    }

    public DVDCollection()
    {
    }

    public ArrayList<DVD> getDVDs()
    {
        return dvds;
    }

    public int getNumDVDs()
    {
        return dvds.size();
    }

    public boolean deleteDVD(DVD inDVD)
    {
       return dvds.remove(inDVD);
    }

    public int CountFavourites()
    {
        int total = 0;

        if (DVD.checkFavourite(true))
        {
            boolean fav = true;   
            int val = fav? 1 : 0;
            total = 1 + total;
        }
        else
        {
            boolean fav = false;   
            int val = fav? 1 : 0;
        }


        return total;
    }
}

我已经按照 class 中提供的编辑 GUI 的步骤进行操作,但仍然出现此问题。我尝试但取消的另一件事是将所有变量转换为字符串,并且还取消了最喜欢的 jcheckbox 的编辑功能,以防出现问题。我做了更多的工作,但都失败了,同样的问题仍然出现。

非常感谢所有帮助

更新:问题已解决

我已经解决了我的代码问题