重命名Filechooser上的按钮

时间:2017-05-03 07:23:40

标签: java swing jfilechooser

如何重命名Filechooser中的按钮,例如从打开到保存

     saveAsButton.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {
            JFileChooser chooser = new JFileChooser();
            int returnVal = chooser.showOpenDialog(null);
            try(FileWriter fw = new FileWriter(chooser.getSelectedFile()+".txt")) {
                fw.write(textPane1.getText().toString());
                fw.flush();
                fw.close();
            } catch (IOException e1) {
                e1.printStackTrace();
            }

        }
    });

1 个答案:

答案 0 :(得分:3)

使用JFileChooser#showSaveDialog代替JFileChooser#showOpenDialog

我建议您查看How to Use File ChoosersJavaDocs了解更多详情

当然,如果您想要更多地控制按钮文字,那么您应该查看JFileChooser#setApproveButtonText及其相关方法

  如果调用showOpenDialog或showSaveDialog,

approveButtonText将重置为默认值

你知道,这很有趣,我多年来一直在使用这种方法,而且它似乎一直有效。

我挖掘了JFileChooser代码,发现showOpen/SaveDialog称之为......

public void setDialogType(int dialogType) {
    if(this.dialogType == dialogType) {
        return;
    }
    checkDialogType(dialogType);
    int oldValue = this.dialogType;
    this.dialogType = dialogType;
    if(dialogType == OPEN_DIALOG || dialogType == SAVE_DIALOG) {
        setApproveButtonText(null);
    }
    firePropertyChange(DIALOG_TYPE_CHANGED_PROPERTY, oldValue, dialogType);
}

这"应该"重置批准按钮文本,但出于某种原因,在我的测试中,showOpenDialog工作,让我们说话很奇怪......

public class CustomFileChooser extends JFileChooser {

    @Override
    public void setDialogType(int dialogType) {
        String currentApproveText = getApproveButtonText();
        super.setDialogType(dialogType);
        setApproveButtonText(currentApproveText);
    }

}

那么,解决方案是什么?好吧,您可以使用showDialog代替,CUSTOM_DIALOG将其设置为setDialogType,但我对此很懒:P

另一种解决方案可能是简单地覆盖approveButtonText并重新应用public class CustomFileChooser extends JFileChooser { @Override public void setDialogType(int dialogType) { String currentApproveText = getApproveButtonText(); super.setDialogType(dialogType); setApproveButtonText(currentApproveText); } } ,例如......

List<String[]>