2016-04-28 81 views
0

我正在尝试编写一个上传带有歌曲数据库的文件的GUI,并允许用户添加,编辑或删除此数据库中的歌曲。歌曲名称出现在组合框中,当选择歌曲时,相关信息出现在不可编辑的文本字段中。界面上有添加,编辑,删除,接受,取消和退出的按钮。当选择编辑或添加时,文本字段变为可编辑并且启用接受和取消按钮。此功能可以正常工作,但接受和取消按钮不起作用。当选择“接受”时,会添加歌曲或编辑当前歌曲,并将其添加到组合框中,并且接受和取消将被禁用,而其他按钮变为启用状态并且文本字段变为不可编辑。取消应该以同样的方式执行,但不是添加或编辑歌曲,接口只是恢复到原始状态。下面是actionPerformed类的代码:为什么我的JAVA GUI程序接受和取消按钮不起作用?

public void actionPerformed(ActionEvent e) { 

     Object source = e.getSource(); 
     int index = songBox.getSelectedIndex(); 
     Song selection = songList.get(index); 
     Song newSong = new Song(); 

     if (source == songBox) { 
      itemCodeField.setText(selection.getSongCode()); 
      descriptionField.setText(selection.getSongName()); 
      artistField.setText(selection.getSongArtist()); 
      albumField.setText(selection.getSongAlbum()); 
      priceField.setText(selection.getSongPrice()); 

     } 

     if (source == addButton) { 

      //Enable and disable appropriate buttons 
      addButton.setEnabled(false); 
      editButton.setEnabled(false); 
      deleteButton.setEnabled(false); 
      acceptButton.setEnabled(true); 
      cancelButton.setEnabled(true); 
      exitButton.setEnabled(false); 

      //Clear text fields and make editable 
      itemCodeField.setText(""); 
      itemCodeField.setEditable(true); 
      descriptionField.setText(""); 
      descriptionField.setEditable(true); 
      artistField.setText(""); 
      artistField.setEditable(true); 
      albumField.setText(""); 
      albumField.setEditable(true); 
      priceField.setText(""); 
      priceField.setEditable(true); 

      //Set song values 
      newSong.setSongCode(itemCodeField.getText()); 
      newSong.setSongName(descriptionField.getText()); 
      newSong.setSongArtist(artistField.getText()); 
      newSong.setSongAlbum(albumField.getText()); 
      newSong.setSongPrice(priceField.getText()); 


     } 

     if (source == editButton) { 

      //Enable and disable appropriate buttons 
      addButton.setEnabled(false); 
      editButton.setEnabled(false); 
      deleteButton.setEnabled(false); 
      acceptButton.setEnabled(true); 
      cancelButton.setEnabled(true); 
      exitButton.setEnabled(false); 

      //Make text fields editable 
      descriptionField.setEditable(true); 
      artistField.setEditable(true); 
      albumField.setEditable(true); 
      priceField.setEditable(true); 

     } 

     if (source == deleteButton) { 

       songBox.removeItemAt(index); 

     } 

    if (source == acceptButton) 
    { 
     if (source == addButton) 
     { 
      //Add new song to array 
      songBox.addItem(newSong); 

      //Enable and disable appropriate buttons 
      addButton.setEnabled(true); 
      editButton.setEnabled(true); 
      deleteButton.setEnabled(true); 
      acceptButton.setEnabled(false); 
      cancelButton.setEnabled(false); 
      exitButton.setEnabled(true); 
     } 

     if (source == editButton) 
     { 
      //Make text fields uneditable 
      descriptionField.setEditable(false); 
      artistField.setEditable(false); 
      albumField.setEditable(false); 
      priceField.setEditable(false); 

      //Set new text 
      selection.setSongName(descriptionField.getText()); 
      selection.setSongArtist(artistField.getText()); 
      selection.setSongAlbum(albumField.getText()); 
      selection.setSongPrice(priceField.getText()); 

      songBox.addItem(selection); 

      //Enable and disable appropriate buttons 
      addButton.setEnabled(true); 
      editButton.setEnabled(true); 
      deleteButton.setEnabled(true); 
      acceptButton.setEnabled(false); 
      cancelButton.setEnabled(false); 
      exitButton.setEnabled(true); 
     } 
    } 

     if (source == cancelButton) 
     { 
      //Enable and disable appropriate buttons 
      addButton.setEnabled(true); 
      editButton.setEnabled(true); 
      deleteButton.setEnabled(true); 
      acceptButton.setEnabled(false); 
      cancelButton.setEnabled(false); 
      exitButton.setEnabled(true); 

      //Make text fields uneditable 
      descriptionField.setEditable(false); 
      artistField.setEditable(false); 
      albumField.setEditable(false); 
      priceField.setEditable(false); 
     } 

     if (source == exitButton) { 


      System.exit(0); 

     } 
    } 

该程序当前正在编译和运行。添加和编辑按钮按照他们的意图进行,但接受和取消按钮不会。选择后,他们什么也不做。文本字段保持可编辑状态,接受和取消按钮保持启用状态,而其他所有按钮保持禁用状态。

更新:取消按钮用于启用或禁用正确的项目,但所做的任何更改不会立即重置,您必须切换组合框。 我现在明白'source'不能同时等于两个按钮输入。但是,接受按钮必须根据用户是否首先选择添加或编辑来做两件事,而我不知道如何处理。

+1

你正在测试if(source == addButton)里面的if(source == acceptButton)。那第二个如果可以更新是真的。 – MTilsted

+0

根据您正在编辑还是添加歌曲,接受操作有所不同。如果不是这样,我将如何区分这两个事件?这也不能解释为什么取消按钮不起作用 – Jes

+0

但你问的是源是否同时等于addButton和cancelButton。这可能会更新发生。 – MTilsted

回答

0

你的代码如下所示:

if (source == acceptButton) 
{ 
    // Irelevant code removed. 

    if (source == cancelButton) 
    { 
     // This code is newer run, because you require first that source 
     // is==acceptButton and here you require that source==cancelButton. 
    } 
} 

但更好的解决方案,是有一个方法为每个按钮,而不是看事件源。如果你正在使用java 8(你应该)看看http://www.codejava.net/java-core/the-java-language/java-8-lambda-listener-example

相关问题