Reputation: 1
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
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