我正在尝试生成JFileChooser
具有Windows外观的内容.我找不到一个方法来改变它,所以我创建了一个扩展的基类,JFileChooser
用以下代码更改UI:
public FileChooser(){
this(null);
}
public FileChooser(String path){
super(path);
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (Exception e) { System.err.println("Error: " + e.getMessage()); }
Run Code Online (Sandbox Code Playgroud)
然后,在另一节课中,我打电话
FileChooser chooser = new FileChooser(fileName);
int val = chooser.showOpenDialog(null);
Run Code Online (Sandbox Code Playgroud)
但是出现的对话框具有Java外观.有关如何改变这一点的任何想法?是否有一个JFileChooser类的方法,我可以使用它而不是这个扩展类?
谢谢!
我对Swing中的JFileChooser有疑问.我正在尝试在下拉框中获取多个文件扩展名,但不知道如何操作.
有方法
extFilter = FileNameExtensionFilter(description, extensions);
Run Code Online (Sandbox Code Playgroud)
然后我可以通过写作来使用
fileChooser.setFileFilter(extFilter);
Run Code Online (Sandbox Code Playgroud)
但是,正如您所看到的,这仅支持下拉列表中的一个选项.如何添加更多?
我有一个带有文本字段的小型Java GUI应用程序.当用户单击文本字段时,将触发事件并启动JFileChooser.它仅限于目录.
我要做的是获取所选目录的完整路径并将其放在文本字段中.
我不知道怎么做,我搜索了大量的java教程和文档,我找不到答案.有人能帮我吗?
澄清:我希望将完整路径作为字符串并将其放在文本字段中,覆盖之前的任何内容.
我在应用程序中使用JFileChooser来浏览目录,但是当我选择目录时,它返回我选择的文件夹上方文件夹的路径.即我选择"C:\ Test"并返回"C:\"
这是我正在使用的代码
JFileChooser c = new JFileChooser();
c.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int rVal = c.showSaveDialog(c);
if (rVal == JFileChooser.APPROVE_OPTION) {
txtDirectory.setText("");
CC_Test.MsgBox(c.getCurrentDirectory().toString());
txtDirectory.setText(c.getCurrentDirectory().toString());
}
if (rVal == JFileChooser.CANCEL_OPTION) {
txtDirectory.setText("");
}
Run Code Online (Sandbox Code Playgroud) 我的问题是,点击Browse按钮后会显示要选择的目录中的所有文件,然后所选图像会正确显示在GUI中.但是当我第二次单击"浏览"按钮时,它仅显示旧图像而不是显示新图像.请帮帮我.
作为参考,我上传了UI.
package GUI;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Graphics2D;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
@SuppressWarnings("serial")
public class MainAppFrame extends JFrame {
private JPanel contentPane;
File targetFile;
BufferedImage targetImg;
public JPanel panel,panel_1;
private static final int baseSize = 128;
private static final String basePath =![enter image description …
Run Code Online (Sandbox Code Playgroud) 我有一个方法从JTextArea获取文本,创建一个文件并在其上写文本如下代码:
public void createTxt() {
TxtFilter txt = new TxtFilter();
JFileChooser fSave = new JFileChooser();
fSave.setFileFilter(txt);
int result = fSave.showSaveDialog(this);
if(result == JFileChooser.APPROVE_OPTION) {
File sFile = fSave.getSelectedFile();
FileFilter selectedFilter = fSave.getFileFilter();
String file_name = sFile.getName();
String file_path = sFile.getParent();
try{
if(!sFile.exists()) {
sFile.createNewFile();
BufferedWriter out = new BufferedWriter(new FileWriter(sFile));
out.write(jTextArea1.getText());
out.close();
JOptionPane.showMessageDialog(null, "Warning file • " + file_name + " • created succesfully in \n" + file_path);
} else {
String message = "File • " + file_name + …
Run Code Online (Sandbox Code Playgroud) 在JFileChooser的Windows外观中,JFileChooser对话框的左侧显示五个按钮:Recent Items,Desktop,My Documents,Computer和Network.这些都表示文件系统的视图,因为Windows资源管理器会显示它们.看起来除非调用setSelectedFile()或setCurrentDirectory()方法,否则JFileChooser默认为My Documents视图.
我试图让用户轻松选择多个映射网络驱动器中的一个,这应该出现在"计算机"视图中.有没有办法将JFileChooser设置为默认打开"计算机"视图?
我尝试了几种方法来强制它,最近的方法是找到根目录并将其设置为currentDirectory,但这显示了该根节点的内容.最新的代码包含在下面.
private File originalServerRoot;
private class SelectOriginalUnitServerDriveListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
JFileChooser origDriveChooser = new JFileChooser();
origDriveChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
File startFile = new File(System.getProperty("user.dir")); //Get the current directory
// Find System Root
while (!FileSystemView.getFileSystemView().isFileSystemRoot(startFile))
{
startFile = startFile.getParentFile();
}
origDriveChooser.setCurrentDirectory(startFile);
origDriveChooser.setDialogTitle("Select the Mapped Network Drive");
int origDriveChooserRetVal = origDriveChooser.showDialog(contentPane,"Open");
if (origDriveChooserRetVal == JFileChooser.APPROVE_OPTION)
{
originalUnitServerRoot = origDriveChooser.getSelectedFile();
}
}
}
Run Code Online (Sandbox Code Playgroud)
是否有一种方法允许我默认选择"计算机"视图(或网络,或任何其他视图),或任何方式欺骗JFileChooser?
编辑
感谢您快速彻底的答案.我结合了Hovercraft Full Of Eels和Guillaume Polet的答案,尝试使代码适用于任何驱动器号.结果代码如下.再一次,谢谢.
private File originalServerRoot;
private class …
Run Code Online (Sandbox Code Playgroud) 我JFileChooser
在我自己的框架中嵌入了一个框架中的其他自定义组件.这是我的应用程序的设计,因为它可能有助于可视化我的问题:
如果你不能说,JFrame
标题下面的列表是JFileChoosers
.这应该是有效的方法是您为目标分配快捷方式,然后当您按下这些快捷键时,所选文件将移动到目标.
我这样做的策略是将快捷方式分配给一个javax.swing.JComponent.WHEN_IN_FOCUSED_WINDOW
范围InputMap
的整个框架.
但令人讨厌的是,某些东西(我假设JFileChooser
)继续响应/吸收我不想要的按键.例如,如果我按下Ctrl+C
我的快捷键操作则不会运行.我尝试了本机外观(我使用的是Windows 7)和默认的L&F,两种情况都有同样的问题.我认为它可能正在尝试对所选文件进行复制操作,JFileChooser
因为如果我点击其中一个按钮强制它失去焦点,突然我的Ctrl+C
命令就完成了我的操作.
但是,我不确定这JFileChooser
是怎么回事.当我调用getKeyListeners()
它时,它返回一个空数组.我也尝试在所有三个范围内清除这个组合键的输入映射,它似乎仍然吸收了按键.
任何人都可以给我一些使JFileChooser
忽略的示例代码Ctrl+C
吗?此外,如果有人能告诉我将来如何调试这样的问题,那将会很有帮助.
这是我到目前为止尝试过的一些代码.您也可以使用它来尝试自己测试,因为此代码编译并运行,原样:
package com.sandbox;
import javax.swing.*;
import java.awt.event.ActionEvent;
public class Sandbox {
public static void main(String[] args) {
JFrame frame = new JFrame();
JPanel panel = new JPanel();
panel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("control C"), "println");
panel.getActionMap().put("println", new AbstractAction() {
public void actionPerformed(ActionEvent e) {
System.out.println("The JPanel action was performed!");
} …
Run Code Online (Sandbox Code Playgroud) 我有一个Java程序浏览本地文件系统的路径,为此我们使用了JFileChooser.如果文件夹名称是简单的英语在Windows,Mac OS X和Linux上正常工作.但是,如果我创建名为特殊字符的文件夹,例如 - ábcEóz,那么它仅在Windows和Linux上显示特殊字符名称,但在OS XI上无法看到那些特殊字符文件夹.它从文件夹列表中忽略它们.
我的程序基于java 7更新21. Mac OS X版本 - 10.8.2
我该如何解决这个问题?
谢谢
更新:我们正在使用JavaFX打包为Mac创建一个应用程序.当我们直接运行app.jar时,它会显示包含特殊字符的路径.但是如果我们尝试使用app启动应用程序,那么它会跳过那些特殊的char文件夹.
我正在使用JFileChooser来选择文件,我试图限制显示只显示jpg或jpeg文件.我尝试过FileFilter和ChoosableFileFilter,它不限制文件选择.这是我的代码:
JFileChooser chooser = new JFileChooser();
FileFilter filter = new FileNameExtensionFilter("JPEG file", new String[] {"jpg", "jpeg"});
chooser.setFileFilter(filter);
chooser.addChoosableFileFilter(filter);
int returnVal = chooser.showOpenDialog(null);
if(returnVal == JFileChooser.APPROVE_OPTION) {
debug.put("You chose to open this file: " + chooser.getSelectedFile().getAbsolutePath());
File selectedFile = new File(chooser.getSelectedFile().getAbsolutePath());
...
Run Code Online (Sandbox Code Playgroud) java ×10
jfilechooser ×10
swing ×7
eclipse ×1
file ×1
filefilter ×1
image ×1
javafx ×1
jdialog ×1
key-bindings ×1
key-events ×1
macos ×1
save ×1
windows ×1