2013-08-24 41 views
0

好的,我有一个文本编辑器,可以使用jFileChooser创建新文件并打开文件。jFileChooser保存选定标签的文件

我想要做的是让文件保存工作。 每次添加或打开一个文件时,它会向tabbedpane添加一个新选项卡,名称将会是文件1等或打开文件的名称。

当您单击保存按钮保存对话框打开

int returnVal = fileChooser.showSaveDialog(this); 

我要插入到文件字段的名称标签上的名称。

另外我该如何制作当前选定选项卡textarea的文件?我曾经试过,但它是一个不走:

int index = tabbedPane.getSelectedIndex(); 
    Component c = tabbedPane.getComponentAt(index); 

    JTextArea a = (JTextArea) c; 
    System.out.println(a.getText()); 

File file = new File(a.getText()); 
fileChooser.setSelectedFile(file); 

所以我需要在我想textarea的字符串的文件。

+1

Google for“Java IO tutorial”。并查看JFileChooser的javadoc中是否允许设置所选文件的方法。这不难找到。 –

回答

2

一个简单的方法是使用JTextComponent.write(Writer)JTextArea延伸JTextComponent

对于Writer使用FileWriter

+0

你能提供一个片段,因为我觉得它有点混乱! – Steve

+2

你能付我吗?为什么不尝试,如果你不成功,发布一个[SSCCE](http://sscce.org/)复制/粘贴堆栈跟踪或编译错误?请注意,SO不是'帮助台'。 –

1

你需要,一些如何将File与标签打开。这样,您可以根据所选标签查找关联的文件。

喜欢的东西HashMap<Component, File>例如

3

跟进@安德鲁的答案,这里是说明了他的意思片段。我冒昧地宁愿使用OutputStreamWriter而不是FileWriter,因为这允许您选择用于写入文件的字符集,这是您通常要控制的内容,而不是依赖于“随机”默认平台字符集。

import java.awt.BorderLayout; 
import java.awt.Desktop; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.OutputStreamWriter; 
import java.io.UnsupportedEncodingException; 

import javax.swing.JButton; 
import javax.swing.JFileChooser; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 
import javax.swing.SwingUtilities; 

public class TestTextArea { 

    private JTextArea textArea; 
    private JButton save; 

    protected void initUI() { 
     JFrame frame = new JFrame(TestTextArea.class.getSimpleName()); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     textArea = new JTextArea(24, 80); 
     save = new JButton("Save to file"); 
     save.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       saveToFile(); 
      } 
     }); 
     frame.add(new JScrollPane(textArea)); 
     JPanel buttonPanel = new JPanel(); 
     buttonPanel.add(save); 
     frame.add(buttonPanel, BorderLayout.SOUTH); 
     frame.setSize(500, 400); 
     frame.setVisible(true); 
    } 

    protected void saveToFile() { 
     JFileChooser fileChooser = new JFileChooser(); 
     int retval = fileChooser.showSaveDialog(save); 
     if (retval == JFileChooser.APPROVE_OPTION) { 
      File file = fileChooser.getSelectedFile(); 
      if (file != null) { 
       if (!file.getName().toLowerCase().endsWith(".txt")) { 
        file = new File(file.getParentFile(), file.getName() + ".txt"); 
       } 
       try { 
        textArea.write(new OutputStreamWriter(new FileOutputStream(file), "utf-8")); 
        Desktop.getDesktop().open(file); 
       } catch (UnsupportedEncodingException e) { 
        e.printStackTrace(); 
       } catch (FileNotFoundException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

      } 
     } 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new TestTextArea().initUI(); 
      } 
     }); 
    } 
}