为什么我的JAVA GUI程序不会接受和取消按钮?

时间:2016-04-28 13:36:56

标签: java user-interface

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

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);

        }
    }

该程序目前正在编译和运行。添加和编辑按钮执行他们想要的操作,但接受和取消按钮不执行。选择后,他们根本不做任何事情。文本字段保持可编辑状态,接受和取消按钮保持启用状态,而所有其他按钮保持禁用状态。

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

1 个答案:

答案 0 :(得分: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