2013-07-09 77 views
-2
程序的
import java.io.*; 
import java.awt.event.*; 
import javax.swing.*; 
import java.awt.*; 
import java.util.*; 

public class two extends JFrame implements ActionListener 
{ 


JLabel l1,l2; 
    JTextArea a1,a2; 
    JButton b1; 
    JMenuBar bar; 
    JMenu menu; 
    JMenuItem m1,m2; 
    JPanel p; 
    ArrayList<String> a; 
    DataOutputStream d1; 

// GUI部數據輸出流不工作

public void go() 
{ 
    p=new JPanel(); 
    bar=new JMenuBar(); 
    menu=new JMenu("File"); 
    m1=new JMenuItem("Save"); 
    m1.addActionListener(this); 
    m2=new JMenuItem("New"); 
    menu.add(m1); 
    menu.add(m2); 


Font f=new Font("Arial",Font.BOLD,16); 
l1=new JLabel("Question "); 
l1.setAlignmentX(CENTER_ALIGNMENT); 
l1.setFont(f); 
l2=new JLabel("Answer"); 
l2.setFont(f); 
l2.setAlignmentX(RIGHT_ALIGNMENT); 
a1=new JTextArea(10,50); 
JScrollPane a4 = new JScrollPane(a1); 
a4.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); 
a4.setMaximumSize(new Dimension(600,220)); 
a4.setAlignmentX(CENTER_ALIGNMENT); 
a2=new JTextArea(10,50); 
JScrollPane a3 = new JScrollPane(a2); 
a3.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); 
a3.setMaximumSize(new Dimension(600,220)); 
a3.setAlignmentX(CENTER_ALIGNMENT); 
b1=new JButton("Next Card"); 
b1.setAlignmentX(LEFT_ALIGNMENT); 
b1.addActionListener(this); 

bar.add(menu); 
setJMenuBar(bar); 
BoxLayout g=new BoxLayout(p,BoxLayout.Y_AXIS); 
p.setLayout(g); 
p.add(l1); 
p.add(Box.createRigidArea(new Dimension(15,15))); 
p.add(a4); 
p.add(Box.createRigidArea(new Dimension(15,15))); 
p.add(l2); 
p.add(Box.createRigidArea(new Dimension(15,15))); 
p.add(a3); 
p.add(Box.createRigidArea(new Dimension(25,25))); 
p.add(b1); 
getContentPane().add(p); 
setVisible(true); 
setSize(500,600); 
setResizable(false); 
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    } 

public static void main(String[] args) { 
    two obj=new two(); 
    obj.go(); 
} 


public void actionPerformed(ActionEvent e) 
{ 
a=new ArrayList<String>(); 
其中文本區域中的內容被保存到listarray

if(e.getSource()==b1) 
{ 
String l=new String(a1.getText()+"/"); 
String w=new String (a2.getText()+"\n"); 
a.add(l); 
a.add(w); 

//添加值

//部分如列表所示由a.size()表示的數組列表()

System.out.println(a.size()); 
a1.setText(""); 
a2.setText(""); 

} 

//方法使用使用FileChooser

if(e.getSource()==m1){ 

JFileChooser fileSave = new JFileChooser(); 
int retrival=fileSave.showSaveDialog(this); 
File d=fileSave.getSelectedFile(); 

if (retrival == JFileChooser.APPROVE_OPTION) { 

     try{ 
     System.out.println(d); 

listarray保存到文件//這部分不被稱爲

 d1=new DataOutputStream(new FileOutputStream(d+".txt"); 

     for(String o:a) 
     { 
     d1.writeChars(o); 
    System.out.println("\nIS SUCCESFULLY WRITTEN INTO FILE!"); 
    } 
     d1.close(); 


    }catch(Exception ex){System.out.println(ex);} 
} 
} 

} 
} 
+8

內容有遺漏非常重要:一個問題。 – mthmulders

+1

您不會安全地關閉您的資源;你應該分別創建兩個輸出並在finally塊中關閉它們;或者只是使用'FileWriter',因爲你好像在寫文本。或者甚至更好,使用番石榴,使用「Closer」。 – fge

+0

爲了更快得到更好的幫助,請發佈[SSCCE](http://sscce.org/)。 –

回答

1

DataOutputStream按預期方式工作。

由於創建了新的ArrayList,當調用actionPerformed時,將不會寫入文件,該文件將替換先前的實例a

a = new ArrayList<String>(); 

清除任何以前的數據的內容,所以沒有寫入文件。將此語句移到構造函數中,以便ArrayList僅初始化一次。使用clear來清除List

旁白:JTextArea先後獲得write method,允許其內容直接寫入文件

+0

謝謝移動ArrayList的構造函數解決了我的問題... –