Mohammed Hazeem
Mohammed Hazeem

Reputation: 1

Disabling the JFileChooser approve button

I have created an UI for Opening a project folder using JFileChooser. When user opening the project folder, the Open dialog button want to disable until the required folder selected.

//This is my button action for opening JFileChooser

private void btnOpenFileActionPerformed(java.awt.event.ActionEvent evt) {                                            
        // TODO add your handling code here:

        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            //Create an object for ProjectChooser
            ProjectChooser projectChooser = new ProjectChooser();

            //OPen the JFileChooser window
            projectChooser.setDialogTitle("Open Test Project");

            projectChooser.setAcceptAllFileFilterUsed(false);
            projectChooser.setFileFilter(new javax.swing.filechooser.FileFilter() {
                @Override
                public boolean accept(File f) {
                    return f.isDirectory() || f.isFile();
                }

                @Override
                public String getDescription() {
                    return "Test Project";
                }
            });

            int res = projectChooser.showOpenDialog(null);
            if (res == JFileChooser.APPROVE_OPTION) {

                title.setText(projectChooser.getSelectedFile().getAbsolutePath() + " - " + "ZUI");
                dirPath.setText(projectChooser.getSelectedFile().getAbsolutePath());
                dirPath.setVisible(false);
                output.setText(projectChooser.getSelectedFile().getAbsolutePath() + "\nrun: \n");
           
            }        
        } catch (Exception ex) {
            ex.printStackTrace();
        }

//This is my ProjectChooser.java File i found this solution from Disable Open button in JFileChooser?

public class ProjectChooser extends JFileChooser {

    private static JButton approveButton, cancelButton;

    public ProjectChooser() {
//Handle jFileChooser's approve Button
        if (approveButton == null) {
            approveButton = lookupButton(ProjectChooser.this, getUI().getApproveButtonText(this));
            approveButton.setEnabled(false);
        }

        setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);

        PropertyChangeListener propertyChangeListener = new PropertyChangeListener() {
            @Override
            public void propertyChange(PropertyChangeEvent evt) {
                if (evt.getPropertyName().equals(JFileChooser.SELECTED_FILE_CHANGED_PROPERTY)) {

                    // System.out.println(evt.getNewValue());
                    String newFile = evt.getNewValue().toString();
                    // System.out.println(newFile);
                    String dif = newFile + "/diffs";
                    File difFile = new File(dif);

                    String scr = newFile + "/screenshots";
                    File scrFile = new File(scr);

                    String testCase = newFile + "/testCases.csv";
                    File testFile = new File(testCase);

                    
                    if (difFile.isDirectory() && difFile.getName().contains("diffs")
                            && scrFile.getName().contains("screenshots")
                            && testFile.getName().contains("testCases.csv")) {

                        approveButton.setEnabled(true);
                    } else {

                        approveButton.setEnabled(false);
                    }
                }
            }
        };
        addPropertyChangeListener(SELECTED_FILE_CHANGED_PROPERTY, propertyChangeListener);
    }

    private JButton lookupButton(Container c, String text) {
        JButton temp = null;
        for (Component comp : c.getComponents()) {
            if (comp == null) {
                continue;
            }
            if (comp instanceof JButton && (temp = (JButton) comp).getText() != null && temp.getText().equals(text)) {
                return temp;
            } else if (comp instanceof Container) {
                if ((temp = lookupButton((Container) comp, text)) != null) {
                    return temp;
                }
            }
        }
        return temp;
    }
}

My problem is this code works only once when click the btnOpenFile button means, The open dialog button disabled only once. after when I click the btnOpenFile button again the open dialog button is not disabled. How can I disable the open dialog button when user select the correct project folder every time. After selecting the correct folder I want to enable the button.

Thanks.

Upvotes: 0

Views: 95

Answers (1)

sorifiend
sorifiend

Reputation: 6307

Change:

private static JButton approveButton, cancelButton;

To be non static:

private JButton approveButton, cancelButton;

You need to do this because a static value is shared between all instances of ProjectChooser.

Upvotes: 0

Related Questions