-
Bug
-
Resolution: Cannot Reproduce
-
P3
-
None
-
8u66
-
x86
-
os_x
FULL PRODUCT VERSION :
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Mac OSX 10.10
Mac OSX 10.11
Possibly other versions of OSX
A DESCRIPTION OF THE PROBLEM :
if the FileFilter is programatically set, via setFileFilter(), the user can no longer select the first item in the dropdown, regardless of what it is. They must first select any other option, then the first item becomes selectable.
REGRESSION. Last worked in version 8u45
ADDITIONAL REGRESSION INFORMATION:
java version "1.8.0_31"
Java(TM) SE Runtime Environment (build 1.8.0_31-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.31-b07, mixed mode)
Bug occurs in every release since update 31
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Create a JFileChooser
Add 2 or more FileFilters to it
Call setFileFilter on the JFileChooser and set the FileFilter to one of the ones you added
Run the program, show the JFileChooser and try to select the first item in the file filter combo box
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
The combo box changes to the first item
ACTUAL -
The combo box stays on the filter set by setFileFilter()
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
//FileChooser demo from Oracle documentation
package components;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.SwingUtilities;
import javax.swing.filechooser.FileFilter;
/*
* FileChooserDemo.java uses these files:
* images/Open16.gif
* images/Save16.gif
*/
public class FileChooserDemo extends JPanel
implements ActionListener {
static private final String newline = "\n";
JButton openButton, saveButton;
JTextArea log;
JFileChooser fc;
public FileChooserDemo() {
super(new BorderLayout());
//Create the log first, because the action listeners
//need to refer to it.
log = new JTextArea(5,20);
log.setMargin(new Insets(5,5,5,5));
log.setEditable(false);
JScrollPane logScrollPane = new JScrollPane(log);
//Create a file chooser
fc = new JFileChooser();
//Create a bunch of file filters to demonstrate bug
FileFilter ffcsv = new FileFilter()
{
@Override
public String getDescription()
{
return "csv";
}
@Override
public boolean accept(
File f)
{
// TODO Auto-generated method stub
return false;
}
};
FileFilter ffxls = new FileFilter()
{
@Override
public String getDescription()
{
return "xls";
}
@Override
public boolean accept(
File f)
{
// TODO Auto-generated method stub
return false;
}
};
FileFilter ffxlsx = new FileFilter()
{
@Override
public String getDescription()
{
return "xlsx";
}
@Override
public boolean accept(
File f)
{
// TODO Auto-generated method stub
return false;
}
};
System.out.println("Java version: " + System.getProperty("java.version"));
fc.addChoosableFileFilter(ffcsv);
fc.addChoosableFileFilter(ffxls);
fc.addChoosableFileFilter(ffxlsx);
//if the FileFilter is set to anything other than default, the user can no longer select the first item in the dropdown, regardless of what it it
//they must first change the dropdown to something else, then the first item becomes selectable
fc.setFileFilter(ffxls);
openButton = new JButton("Open a File...",
createImageIcon("images/Open16.gif"));
openButton.addActionListener(this);
//Create the save button. We use the image from the JLF
//Graphics Repository (but we extracted it from the jar).
saveButton = new JButton("Save a File...",
createImageIcon("images/Save16.gif"));
saveButton.addActionListener(this);
//For layout purposes, put the buttons in a separate panel
JPanel buttonPanel = new JPanel(); //use FlowLayout
buttonPanel.add(openButton);
buttonPanel.add(saveButton);
//Add the buttons and the log to this panel.
add(buttonPanel, BorderLayout.PAGE_START);
add(logScrollPane, BorderLayout.CENTER);
}
public void actionPerformed(ActionEvent e) {
//Handle open button action.
if (e.getSource() == openButton) {
int returnVal = fc.showOpenDialog(FileChooserDemo.this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
//This is where a real application would open the file.
log.append("Opening: " + file.getName() + "." + newline);
} else {
log.append("Open command cancelled by user." + newline);
}
log.setCaretPosition(log.getDocument().getLength());
//Handle save button action.
} else if (e.getSource() == saveButton) {
int returnVal = fc.showSaveDialog(FileChooserDemo.this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
//This is where a real application would save the file.
log.append("Saving: " + file.getName() + "." + newline);
} else {
log.append("Save command cancelled by user." + newline);
}
log.setCaretPosition(log.getDocument().getLength());
}
}
/** Returns an ImageIcon, or null if the path was invalid. */
protected static ImageIcon createImageIcon(String path) {
java.net.URL imgURL = FileChooserDemo.class.getResource(path);
if (imgURL != null) {
return new ImageIcon(imgURL);
} else {
System.err.println("Couldn't find file: " + path);
return null;
}
}
/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event dispatch thread.
*/
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("FileChooserDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Add content to the window.
frame.add(new FileChooserDemo());
//Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
//Schedule a job for the event dispatch thread:
//creating and showing this application's GUI.
SwingUtilities.invokeLater(new Runnable() {
public void run() {
//Turn off metal's use of bold fonts
UIManager.put("swing.boldMetal", Boolean.FALSE);
createAndShowGUI();
}
});
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Select any other item other than the first item, then every option is selectable
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Mac OSX 10.10
Mac OSX 10.11
Possibly other versions of OSX
A DESCRIPTION OF THE PROBLEM :
if the FileFilter is programatically set, via setFileFilter(), the user can no longer select the first item in the dropdown, regardless of what it is. They must first select any other option, then the first item becomes selectable.
REGRESSION. Last worked in version 8u45
ADDITIONAL REGRESSION INFORMATION:
java version "1.8.0_31"
Java(TM) SE Runtime Environment (build 1.8.0_31-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.31-b07, mixed mode)
Bug occurs in every release since update 31
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Create a JFileChooser
Add 2 or more FileFilters to it
Call setFileFilter on the JFileChooser and set the FileFilter to one of the ones you added
Run the program, show the JFileChooser and try to select the first item in the file filter combo box
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
The combo box changes to the first item
ACTUAL -
The combo box stays on the filter set by setFileFilter()
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
//FileChooser demo from Oracle documentation
package components;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.SwingUtilities;
import javax.swing.filechooser.FileFilter;
/*
* FileChooserDemo.java uses these files:
* images/Open16.gif
* images/Save16.gif
*/
public class FileChooserDemo extends JPanel
implements ActionListener {
static private final String newline = "\n";
JButton openButton, saveButton;
JTextArea log;
JFileChooser fc;
public FileChooserDemo() {
super(new BorderLayout());
//Create the log first, because the action listeners
//need to refer to it.
log = new JTextArea(5,20);
log.setMargin(new Insets(5,5,5,5));
log.setEditable(false);
JScrollPane logScrollPane = new JScrollPane(log);
//Create a file chooser
fc = new JFileChooser();
//Create a bunch of file filters to demonstrate bug
FileFilter ffcsv = new FileFilter()
{
@Override
public String getDescription()
{
return "csv";
}
@Override
public boolean accept(
File f)
{
// TODO Auto-generated method stub
return false;
}
};
FileFilter ffxls = new FileFilter()
{
@Override
public String getDescription()
{
return "xls";
}
@Override
public boolean accept(
File f)
{
// TODO Auto-generated method stub
return false;
}
};
FileFilter ffxlsx = new FileFilter()
{
@Override
public String getDescription()
{
return "xlsx";
}
@Override
public boolean accept(
File f)
{
// TODO Auto-generated method stub
return false;
}
};
System.out.println("Java version: " + System.getProperty("java.version"));
fc.addChoosableFileFilter(ffcsv);
fc.addChoosableFileFilter(ffxls);
fc.addChoosableFileFilter(ffxlsx);
//if the FileFilter is set to anything other than default, the user can no longer select the first item in the dropdown, regardless of what it it
//they must first change the dropdown to something else, then the first item becomes selectable
fc.setFileFilter(ffxls);
openButton = new JButton("Open a File...",
createImageIcon("images/Open16.gif"));
openButton.addActionListener(this);
//Create the save button. We use the image from the JLF
//Graphics Repository (but we extracted it from the jar).
saveButton = new JButton("Save a File...",
createImageIcon("images/Save16.gif"));
saveButton.addActionListener(this);
//For layout purposes, put the buttons in a separate panel
JPanel buttonPanel = new JPanel(); //use FlowLayout
buttonPanel.add(openButton);
buttonPanel.add(saveButton);
//Add the buttons and the log to this panel.
add(buttonPanel, BorderLayout.PAGE_START);
add(logScrollPane, BorderLayout.CENTER);
}
public void actionPerformed(ActionEvent e) {
//Handle open button action.
if (e.getSource() == openButton) {
int returnVal = fc.showOpenDialog(FileChooserDemo.this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
//This is where a real application would open the file.
log.append("Opening: " + file.getName() + "." + newline);
} else {
log.append("Open command cancelled by user." + newline);
}
log.setCaretPosition(log.getDocument().getLength());
//Handle save button action.
} else if (e.getSource() == saveButton) {
int returnVal = fc.showSaveDialog(FileChooserDemo.this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
//This is where a real application would save the file.
log.append("Saving: " + file.getName() + "." + newline);
} else {
log.append("Save command cancelled by user." + newline);
}
log.setCaretPosition(log.getDocument().getLength());
}
}
/** Returns an ImageIcon, or null if the path was invalid. */
protected static ImageIcon createImageIcon(String path) {
java.net.URL imgURL = FileChooserDemo.class.getResource(path);
if (imgURL != null) {
return new ImageIcon(imgURL);
} else {
System.err.println("Couldn't find file: " + path);
return null;
}
}
/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event dispatch thread.
*/
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("FileChooserDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Add content to the window.
frame.add(new FileChooserDemo());
//Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
//Schedule a job for the event dispatch thread:
//creating and showing this application's GUI.
SwingUtilities.invokeLater(new Runnable() {
public void run() {
//Turn off metal's use of bold fonts
UIManager.put("swing.boldMetal", Boolean.FALSE);
createAndShowGUI();
}
});
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Select any other item other than the first item, then every option is selectable