我的应用程序中有一个名为"另存为"的方法,它将我的应用程序的图像保存到文件中.我使用JFileChooser让用户选择他们想要的位置来保存文件.问题是除非用户明确键入文件格式,否则它将保存没有扩展名的文件.如何在"文件类型"下拉菜单中使用jpg,png等格式.
并且,如何从"文件类型"下拉菜单中获取用于保存图像文件的扩展名.
ImageIO.write(image,extension,file);
Run Code Online (Sandbox Code Playgroud) private void openMenuActionPerformed(java.awt.event.ActionEvent evt) {
DBmanager db = new DBmanager();
if (!db.getCurrentUser().equals("Admin")) {
JOptionPane.showMessageDialog(this, "You are Not Allowed to Run Applications");
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("PDF Documents", "pdf"));
fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("MS Office Documents", "docx", "xlsx", "pptx"));
fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("Images", "jpg", "png", "gif", "bmp"));
fileChooser.setAcceptAllFileFilterUsed(false);
int returnVal = fileChooser.showOpenDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
if (Desktop.isDesktopSupported()) {
try {
Desktop.getDesktop().open(file);
} catch (Exception e) {
e.printStackTrace();
}
}
}
} else if (db.getCurrentUser().equals("Admin")) {
JFileChooser fileChooser …
Run Code Online (Sandbox Code Playgroud) 我想限制一个JFileChooser
只选择mp3文件.但是,以下代码允许所有文件类型:
FileFilter filter = new FileNameExtensionFilter("MP3 File","mp3");
fileChooser.addChoosableFileFilter(filter);
fileChooser.showOpenDialog(frame);
File file = fileChooser.getSelectedFile();
Run Code Online (Sandbox Code Playgroud) 我正在用java编写一个图编辑器.此应用程序可以选择导出到各种标准图像格式,如.jpg,.png等.当用户单击文件 - >导出时,您将获得JFileChooser
其中包含FileFilter
s 的数量.jpg
,.png
等等.
现在这是我的问题:
有没有办法将默认值的扩展调整到所选的文件过滤器?例如,如果文档名为"lolcat",则在选择png过滤器时,默认选项应为"lolcat.png",当用户选择jpg文件过滤器时,默认值应自动更改为"lolcat.jpg".
这可能吗?我该怎么做?
编辑:基于下面的答案,我写了一些代码.但它还没有完全奏效.我添加了一个propertyChangeListener
到FILE_FILTER_CHANGED_PROPERTY
,但似乎在这个方法getSelectedFile()
返回null.这是代码.
package nl.helixsoft;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.filechooser.FileFilter;
public class JFileChooserTest {
public class SimpleFileFilter extends FileFilter {
private String desc;
private List<String> extensions;
private boolean showDirectories;
/**
* @param name example: "Data files"
* @param glob example: "*.txt|*.csv"
*/
public SimpleFileFilter …
Run Code Online (Sandbox Code Playgroud) 我希望我的JFileChooser能够从详细信息视图开始,而不是从它开始的"列表"视图开始.你是如何做到的?
我有一个JFileChooser,我需要以编程方式将其currentDirectory设置为包含多个SMB共享的网络主机(例如\\blah
).从技术上讲,这不是一个"目录",而是一个表示可用共享列表的shell文件夹.
JFileChooser在导航到特定共享(例如\\blah\someShare
)时没有问题,但是无法处理主机"目录"本身(例如\\blah
).
用户可以通过"网络"shell文件夹,或通过查找特定共享并导航到其父目录,导航到JFileChooser内的此类"目录".调试显示引擎盖下此目录表示为a Win32ShellFolder2
.到目前为止,我以编程方式设置currentDirectory的所有尝试都失败了.
new File("\\\\blah")
可以创建,但从Java的角度来看实际上并不存在.
chooser.setCurrentDirectory(new File("\\\\blah"));
失败,因为JFileChooser
检查给定目录是否存在,并new File("\\\\blah").exists()
返回false.
File dir = new File("\\\\blah").getCanonicalFile();
失败,但有异常:
java.io.IOException: Invalid argument
at java.io.WinNTFileSystem.canonicalize0(Native Method)
at java.io.WinNTFileSystem.canonicalize(WinNTFileSystem.java:428)
at java.io.File.getCanonicalPath(File.java:618)
at java.io.File.getCanonicalFile(File.java:643)
Run Code Online (Sandbox Code Playgroud)File dir = ShellFolder.getShellFolder(new File("\\\\blah"));
失败,但有异常:
java.io.FileNotFoundException
at sun.awt.shell.ShellFolder.getShellFolder(ShellFolder.java:247)
Run Code Online (Sandbox Code Playgroud)File dir = new Win32ShellFolderManager2().createShellFolder(new File("\\\\blah"));
失败,但有异常:
java.io.FileNotFoundException: File \\blah not found
at sun.awt.shell.Win32ShellFolderManager2.createShellFolder(Win32ShellFolderManager2.java:80)
at sun.awt.shell.Win32ShellFolderManager2.createShellFolder(Win32ShellFolderManager2.java:64)
Run Code Online (Sandbox Code Playgroud)Path dir = Paths.get("\\\\blah");
失败,但有异常:
java.nio.file.InvalidPathException: UNC path is missing sharename: \\blah
at …
Run Code Online (Sandbox Code Playgroud)chooser = new JFileChooser();
chooser.setSize(300, 200);
if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
.......
}
Run Code Online (Sandbox Code Playgroud)
这不起作用.始终以默认大小打开.
以下代码的输出是:
java.vendor Sun Microsystems Inc.
java.version 1.6.0_26
java.runtime.version 1.6.0_26-b03
sun.arch.data.model 32
os.name Windows XP
os.version 5.1
os.arch x86
Input selection cancelled by user.
Exception while removing reference: java.lang.InterruptedException
java.lang.InterruptedException
at java.lang.Object.wait(Native Method)
at java.lang.ref.ReferenceQueue.remove(Unknown Source)
at java.lang.ref.ReferenceQueue.remove(Unknown Source)
at sun.java2d.Disposer.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
以下代码显示了我的计算机上的异常.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GUI extends JPanel implements ActionListener {
private final String newline = System.getProperty("line.separator");
JButton openButton;
JTextArea log;
JFileChooser fc;
public GUI() {
super(new BorderLayout());
log = new JTextArea(20,40); …
Run Code Online (Sandbox Code Playgroud) 我正在寻找一个允许您附加计算机文件的应用程序.例如,当JFileChooser打开时,您可以选择多个文件,当您单击"添加"时,它会将其添加到窗口中,然后您可以根据需要对这些文件执行不同的操作.与在电子邮件中附加文件类似.我要展示的所有代码都是JFileChooser,因为我想在进一步研究之前我应该学会如何做到这一点.
提前致谢
import javax.swing.JFileChooser;
import java.io.File;
public class Locket {
public static void main(String[] args)
{
JFileChooser chooser = new JFileChooser();
File f = new File("Desktop");
chooser.setCurrentDirectory(f);
chooser.showOpenDialog(null);
}
Run Code Online (Sandbox Code Playgroud)
}
我不喜欢Linux中这种丑陋的FileChooser布局.
这种布局被任何其他程序使用,并且更加美观.
这个布局是用Java吗?如果是这样,怎么样?
java ×10
jfilechooser ×10
swing ×8
filefilter ×2
windows ×2
filesystems ×1
linux ×1
size ×1
smb ×1