static final File HOME = new File(System.getProperty("user.home"));
static final File CUSTOM = new File(HOME, ".jpilot");
JFileChooser fc = new JFileChooser(new File("TestData", "in")) {
void homeButtonPressed() {
setCurrentDirectory(!getCurrentDirectory().equals(HOME) ? HOME : CUSTOM);
}
};
fc.showOpenDialog(this);
File file = fc.getSelectedFile();
Поэтому мой вопрос заключается в том, как заменить несуществующий вымышленный метод homeButtonPressed() рабочим кодом.
Вот вы видите я имею в виду кнопку:
В поисках подходящего Слушателя я выполнил следующее:
JFileChooser fc = new JFileChooser(new File("TestData/in"));
System.out.println("FileChooser="+fc.getClass());
System.out.println("FileSystemView="+fc.getFileSystemView().getClass());
for (PropertyChangeListener listener : fc.getPropertyChangeListeners())
System.out.println("PropChListener="+listener);
for (Component component : fc.getComponents())
System.out.println("Component="+component);
for (ComponentListener listener : fc.getComponentListeners())
System.out.println("CompListener="+listener);
PropertyChangeListener dirListener = fc.getPropertyChangeListeners()[3];
System.out.println("dirListener="+dirListener.getClass());
Похоже, что BasicDirectoryModel может быть полезен, но я понятия не имею, как его использовать.
Какое имя мне следует использовать для fc.getPropertyChangeListeners(String имя_свойства)?
Я хочу использовать кнопку «Домой» в JFileChooser для переключения между пользовательским каталогом и домашним каталогом. [code]static final File HOME = new File(System.getProperty("user.home")); static final File CUSTOM = new File(HOME, ".jpilot"); JFileChooser fc = new JFileChooser(new File("TestData", "in")) { void homeButtonPressed() { setCurrentDirectory(!getCurrentDirectory().equals(HOME) ? HOME : CUSTOM); } }; fc.showOpenDialog(this); File file = fc.getSelectedFile(); [/code] Поэтому мой вопрос заключается в том, как заменить несуществующий вымышленный метод homeButtonPressed() рабочим кодом. Вот вы видите я имею в виду кнопку: [img]https://i.sstatic.net/wjDDzdcY.png[/img]
В поисках подходящего Слушателя я выполнил следующее: [code]JFileChooser fc = new JFileChooser(new File("TestData/in")); System.out.println("FileChooser="+fc.getClass()); System.out.println("FileSystemView="+fc.getFileSystemView().getClass()); for (PropertyChangeListener listener : fc.getPropertyChangeListeners()) System.out.println("PropChListener="+listener); for (Component component : fc.getComponents()) System.out.println("Component="+component); for (ComponentListener listener : fc.getComponentListeners()) System.out.println("CompListener="+listener); PropertyChangeListener dirListener = fc.getPropertyChangeListeners()[3]; System.out.println("dirListener="+dirListener.getClass()); [/code] Похоже, что BasicDirectoryModel может быть полезен, но я понятия не имею, как его использовать. Какое имя мне следует использовать для fc.getPropertyChangeListeners(String имя_свойства)? [code]FileChooser=class javax.swing.JFileChooser FileSystemView=class javax.swing.filechooser.UnixFileSystemView PropChListener=sun.swing.FilePane[,0,0,0x0,invalid,layout=java.awt.BorderLayout,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.synth.SynthBorder@17b8a8df,flags=265,maximumSize=,minimumSize=,preferredSize=java.awt.Dimension[width=405,height=135]] PropChListener=sun.swing.plaf.synth.SynthFileChooserUIImpl$FilterComboBoxModel@141e7727 PropChListener=sun.swing.plaf.synth.SynthFileChooserUI$SynthFCPropertyChangeListener@18d105a PropChListener=javax.swing.plaf.basic.BasicDirectoryModel@5a761e8e PropChListener=java.beans.PropertyChangeListenerProxy@46c7373a Component=javax.swing.JPanel[,0,0,0x0,invalid,layout=java.awt.BorderLayout,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.synth.SynthBorder@2187d78a,flags=9,maximumSize=,minimumSize=,preferredSize=] Component=javax.swing.JPanel[,0,0,0x0,invalid,layout=java.awt.BorderLayout,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.synth.SynthBorder@48610c20,flags=9,maximumSize=,minimumSize=,preferredSize=] Component=sun.swing.FilePane[,0,0,0x0,invalid,layout=java.awt.BorderLayout,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.synth.SynthBorder@17b8a8df,flags=265,maximumSize=,minimumSize=,preferredSize=java.awt.Dimension[width=405,height=135]] Component=javax.swing.JPanel[,0,0,0x0,invalid,layout=javax.swing.BoxLayout,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.synth.SynthBorder@2209e9cc,flags=9,maximumSize=,minimumSize=,preferredSize=] dirListener=class javax.swing.plaf.basic.BasicDirectoryModel [/code] Кстати, я использую Java 21 и разрабатываю с помощью IDE NetBeans.