Mac OS X中是否存在使用JFileChooser.showDialog(Component,String)设置标题的错误?

时间:2014-08-25 05:31:23

标签: java macos swing jfilechooser

搜索没有解决此问题。

我使用简单的代码显示带有自定义标题和接受按钮的JFileChooser对话框:

JFileChooser fc = new JFileChooser();
fc.showDialog(null,"MyText");

在Windows 7上,这可以正常工作:显示一个保存对话框,其中包含"保存"替换为" MyText"在“接受”按钮对话框标题上。

但是,在Mac OS X上,只更改了“接受”按钮文本 - 对话框标题为空白。我使用的是Java SE 7和MacOS 10.8.5。

在上面两者之间插入这一行:

fc.setDialogTitle("MyText");

显示正确的标题。这是一个已知问题,和/或其他人是否可以重现此行为?

2 个答案:

答案 0 :(得分:7)

您在Windows上遇到的不是预期的行为(因为没有记录),它只是一个实现副作用

showDialog()用于显示自定义对话框(例如,不是“打开”或“保存”对话框)。它有一个参数来指定批准按钮的文本。如果没有使用setDialogTitle()方法设置标题,则实施任意选择使用批准按钮的文本作为Windows操作系统上的标题,但是这里没有记录,您不应指望这个工作。< / p>

如果您想要自定义标题,请使用setDialogTitle()。如果您需要自定义批准按钮文本,请使用setApproveButtonText()。显然,showDialog()也会采用批准按钮的文字,在这种情况下,您无需事先致电setApproveButtonText()

如果您想要一个“打开”对话框,请使用showOpenDialog()方法。如果需要“保存”对话框,请使用showSaveDialog()。如果您想要自定义对话框,请仅使用showDialog()

答案 1 :(得分:4)

  1. 以下是UIManager的所有可访问密钥(对于所有受支持的本机操作系统和标准LaF,其中一部分无法通过UIManager中的循环访问),注意到成功是挥发性的,取决于Native OS和使用的LaF

  2. 您可以从JFileChooser获取父级,转换为JDialog

  3. JFileChooser添加到您自己的JDialog(简单,不需要任何特殊设置,例如myDialog.add(myFileChooser); + myDialog.pack();

  4. there is possible to play with components tree


  5. UIManager的所有可访问密钥(其中一部分......

    import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.Locale;
    
    import javax.swing.JButton;
    import javax.swing.JDialog;
    import javax.swing.JFileChooser;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.SwingUtilities;
    import javax.swing.UIManager;
    
    public class Test extends JDialog {
    
        private JFileChooser fc = null;
        private JFrame bfcParent = null;
    
        public Test(JFrame parent, boolean modal) {
            super(parent, modal);
            this.bfcParent = parent;
            if (fc == null) {
                fc = new JFileChooser();
                fc.setAcceptAllFileFilterUsed(false);
                fc.setLocale(Locale.ENGLISH);
                UIManager.put("FileChooser.openDialogTitleText", "Open Dialog");
                UIManager.put("FileChooser.saveDialogTitleText", "Save Dialog");
                UIManager.put("FileChooser.lookInLabelText", "LookIn");
                UIManager.put("FileChooser.saveInLabelText", "SaveIn");
                UIManager.put("FileChooser.upFolderToolTipText", "UpFolder");
                UIManager.put("FileChooser.homeFolderToolTipText", "HomeFolder");
                UIManager.put("FileChooser.newFolderToolTipText", "New FOlder");
                UIManager.put("FileChooser.listViewButtonToolTipText", "View");
                UIManager.put("FileChooser.detailsViewButtonToolTipText", "Details");
                UIManager.put("FileChooser.fileNameHeaderText", "Name");
                UIManager.put("FileChooser.fileSizeHeaderText", "Size");
                UIManager.put("FileChooser.fileTypeHeaderText", "Type");
                UIManager.put("FileChooser.fileDateHeaderText", "Date");
                UIManager.put("FileChooser.fileAttrHeaderText", "Attr");
                UIManager.put("FileChooser.fileNameLabelText", "Label");
                UIManager.put("FileChooser.filesOfTypeLabelText", "filesOfType");
                UIManager.put("FileChooser.openButtonText", "Open");
                UIManager.put("FileChooser.openButtonToolTipText", "Open");
                UIManager.put("FileChooser.saveButtonText", "Save");
                UIManager.put("FileChooser.saveButtonToolTipText", "Save");
                UIManager.put("FileChooser.directoryOpenButtonText", "Open Directory");
                UIManager.put("FileChooser.directoryOpenButtonToolTipText", "Open Directory");
                UIManager.put("FileChooser.cancelButtonText", "Cancel");
                UIManager.put("FileChooser.cancelButtonToolTipText", "CanMMcel");
                UIManager.put("FileChooser.newFolderErrorText", "newFolder");
                UIManager.put("FileChooser.acceptAllFileFilterText", "Accept");
                fc.updateUI();
                SwingUtilities.updateComponentTreeUI(fc);
            }
        }
    
        public int openFileChooser() {
            //fc.setDialogTitle("Load File);
            fc.resetChoosableFileFilters();
            int returnVal = 0;
            fc.setDialogType(JFileChooser.OPEN_DIALOG);
            returnVal = fc.showDialog(this.bfcParent, "Load File");       
            if (returnVal == JFileChooser.APPROVE_OPTION) { //Process the results.
                System.out.println("Opened");
            } else {
                System.out.println("Failed");
            }
            return returnVal;
        }
    
        private static void createAndShowGUI() {
            JFrame frame = new JFrame("FileChooser");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            JPanel jp = new JPanel(new BorderLayout());
            JButton openButton = new JButton("Open File");
            final Test test = new Test(frame, true);
            openButton.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    test.openFileChooser();
    
                }
            });
            openButton.setEnabled(true);
            jp.add(openButton, BorderLayout.AFTER_LAST_LINE);       
            frame.add(jp); //Add content to the window.        
            frame.pack();//Display the window.
            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() {
                @Override
                public void run() {
                    //Turn off metal's use of bold fonts
                    createAndShowGUI();
                }
            });
        }
    }