我正在尝试编写一个上传带有歌曲数据库的文件的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'不能同时等于两个按钮输入。但是,接受按钮必须根据用户是否首先选择添加或编辑来做两件事,而我不知道如何处理。
2016-04-28
Jes
+1
你正在测试if(source == addButton)里面的if(source == acceptButton)。那第二个如果可以更新是真的。 –
+0
根据您正在编辑还是添加歌曲,接受操作有所不同。如果不是这样,我将如何区分这两个事件?这也不能解释为什么取消按钮不起作用 –
+0
但你问的是源是否同时等于addButton和cancelButton。这可能会更新发生。 –