2014-02-14 33 views
0

我正在构建一个工具来更新一个txt文件。在JOptionPane中,我想要文件更新如果单选按钮“添加魅力”被选中点击JOptionPane.Ok_Option按钮。代码编译正常,但是当程序运行时,txt文件中不会发生任何更改。java get单选按钮选择&joptionpane.ok_option

 import java.io.File; 
     import java.io.BufferedReader; 
     import java.io.BufferedWriter; 
     import java.io.FileReader; 
     import java.io.FileFilter; 
     import java.io.FileWriter; 
     import java.io.IOException; 
     import java.io.PrintWriter; 
     import java.awt.Color; 
     import java.awt.BorderLayout; 
     import java.awt.GridLayout; 
     import java.awt.Container; 
     import java.awt.event.ActionEvent; 
     import java.awt.event.ActionListener; 
     import javax.swing.SwingUtilities; 
     import javax.swing.border.Border; 
    import javax.swing.*; 


    public class test extends JFrame implements ActionListener { 


     public static void main (String[]args) { 
      test gui=new test(); 
      } 

     JPanel pnl=new JPanel(new BorderLayout()); 
     JButton addBtn; 
     String path=null; 
     Container contentPane=getContentPane(); 
     JPanel grid=new JPanel(new GridLayout(1,1)); 
     Border border1=BorderFactory.createLineBorder(Color.BLACK,5); 
     Border border2=BorderFactory.createLineBorder(Color.GRAY,5); 
     ImageIcon add=new ImageIcon("add.jpg"); 
     String username=(System.getProperty("user.name")); 
     JRadioButton radd; 
     JRadioButton rrem; 
     JTextField charmnum; 
     JTextField charmn; 
     JTextField charmdd; 

     public test() { 
      super("TEST"); 
      setSize(200,200); 
      setDefaultCloseOperation(EXIT_ON_CLOSE); 
      add(grid); 
      setVisible(true); 
      setAlwaysOnTop(false); 
      setResizable(false); 
      addBtn=new JButton("ADD",add); 
      addBtn.addActionListener(this); 
      grid.add(addBtn); 
      grid.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); 
      contentPane.add("North",grid); 
      grid.revalidate(); 
      } 

     public void actionPerformed(ActionEvent event) { 

      if(event.getSource()==addBtn) { 
       try { 
        JPanel acpnl = new JPanel(new GridLayout(5,1)); 
        /*JRadioButton */radd=new JRadioButton("Add Charm"); 
        /*JRadioButton */rrem=new JRadioButton("Remove Charm",false); 
        //rrem.setEnabled(false); 
        /*JTextField */charmnum = new JTextField(12); 
        /*JTextField */charmn = new JTextField(12); 
        /*JTextField */charmdd = new JTextField(12); 
        ButtonGroup radios=new ButtonGroup(); 
        charmnum.setEditable(false); 
        charmn.setEditable(false); 
        charmdd.setEditable(false); 
        radd.addActionListener(this); 
        rrem.addActionListener(this); 
        radios.add(radd); 
        radios.add(rrem); 
        add(acpnl); 
        acpnl.add(radd); 
        acpnl.add(rrem); 
        acpnl.add(Box.createHorizontalStrut(15)); // a spacer 
        acpnl.add(new JLabel("Charm #:")); 
        acpnl.add(charmnum); 
        acpnl.add(Box.createHorizontalStrut(15)); // a spacer 
        acpnl.add(new JLabel("Charm Name:")); 
        acpnl.add(charmn); 
        acpnl.add(Box.createHorizontalStrut(15)); // a spacer 
        acpnl.add(new JLabel("Charm DueDate:")); 
        acpnl.add(charmdd); 
        boolean test=radd.isSelected(); 

        int result = JOptionPane.showConfirmDialog(null,acpnl,"Fill in the Charm Information",JOptionPane.OK_CANCEL_OPTION); 
        if (result==JOptionPane.OK_OPTION)while(test) { 

         String strfile, midfile, finalfile; 
         File batchfile=new File("test.txt"); 
         BufferedReader br=new BufferedReader(new FileReader(batchfile)); 
         File newfile=new File("temp.txt"); 
         newfile.createNewFile(); 
         PrintWriter pw=new PrintWriter(new BufferedWriter(new FileWriter(newfile))); 
         while ((strfile = br.readLine()) !=null) { 
          String[]fileinput=new String[2]; 
          String A=(charmnum.getText()); 
          fileinput[0]=(A); 
          String B=(charmn.getText()); 
          fileinput[1]=(B); 

          String PART1NEW= 
           "If exist \"C:%desktop%\\"+fileinput[0]+" Testing\" GOTO copy"+fileinput[0]+" >> %log%.txt\r\n"+ 
           "set charm#="+fileinput[0]+" >> %log%.txt\r\n"+ 
           "GOTO errormissing1 >> %log%.txt\r\n"+ 
           ":"+fileinput[0]+"check >> %log%.txt\r\n"+ 
           "::p1end"; 
          /*String PART1REM= 
           "If exist \"C:%desktop%\\"+fileinput[0]+" Testing\" GOTO copy"+fileinput[0]+" >> %log%.txt\r\n"+ 
           "set charm#="+fileinput[0]+" >> %log%.txt\r\n"+ 
           "GOTO errormissing1 >> %log%.txt\r\n"+ 
           ":"+fileinput[0]+"check >> %log%.txt\r\n"; */ 
          String PART2NEW= 
           ":copy"+fileinput[0]+" >> %log%.txt\r\n"+ 
           "echo. >> %log%.txt\r\n"+ 
           "echo "+fileinput[0]+" >> %log%.txt\r\n"+ 
           "xcopy \"C:%desktop%\\"+fileinput[0]+" Testing\" \"X:%mycharmsopen%\\"+fileinput[0]+" - "+fileinput[1]+"\\\" /D /E /C /R /I /K /Y >> %log%.txt\r\n"+ 
           "GOTO "+fileinput[0]+"check >> %log%.txt\r\n"+ 
           "::p2end"; 
          /*String PART2REM= 
           ":copy"+fileinput[0]+" >> %log%.txt\r\n"+ 
           "echo. >> %log%.txt\r\n"+ 
           "echo "+fileinput[0]+" >> %log%.txt\r\n"+ 
           "xcopy \"C:%desktop%\\"+fileinput[0]+" Testing\" \"X:%mycharmsopen%\\"+fileinput[0]+" - "+fileinput[1]+"\\\" /D /E /C /R /I /K /Y >> %log%.txt\r\n"+ 
           "GOTO "+fileinput[0]+"check >> %log%.txt\r\n"; */ 

          String PART1END="::p1end"; 
          String PART2END="::p2end"; 
          midfile=(strfile.replace(PART1END,PART1NEW)); 
          finalfile=(midfile.replace(PART2END,PART2NEW)); 
          if (finalfile != null) { 
            pw.println(finalfile); 
           } 
          } 
         pw.close(); 
         br.close(); 
         batchfile.delete(); 
         newfile.renameTo(batchfile); 
         } 
        } 


       catch (Exception e6) { 
        JOptionPane.showMessageDialog(this,"Error has occurred in \"addBtn\" actionEvent.","Error",JOptionPane.ERROR_MESSAGE); 
        e6.printStackTrace(); 
        } 
       } 
      if (radd.isSelected()) { 
       charmnum.setEditable(true); 
       charmn.setEditable(true); 
       charmdd.setEditable(false); 
       } 
      if (rrem.isSelected()) { 
       charmnum.setEditable(true); 
       charmn.setEditable(false); 
       charmdd.setEditable(false); 
       } 
      } 
     } 

TXT文件位于同一目录的程序,它包含以下(更新前):

 null 
     null 
     null 
     null 
     ::p1end 
     null 
     null 
     null 
     null 
     ::p2end 
     null 
     null 
     null 
     null 

我在92行缩小的问题:

 if (result==JOptionPane.OK_OPTION)while(test) { 

(test)被注释掉时,程序成功地对txt文件进行了更改,但未考虑选择了哪个单选按钮。 我知道我可以在主JFrame中创建另一个Jbutton来替换JOptionPane中的2个单选按钮,但我真的试图使这个设置工作。

有什么东西可以取代而(测试)使这个程序按需要工作?

(我提前嵌套不好的代码和类组织道歉)

回答

0

交换线路:

int result = JOptionPane.showConfirmDialog(null,acpnl,"Fill in the Charm Information",JOptionPane.OK_CANCEL_OPTION); 
boolean test=radd.isSelected(); 

您当前拥有它的样子,你在test存储radd是否之前选择它的父面板会显示给用户,所以它始终是false。另外,使用if (result == JOptionPane.OK_OPTION && test)

+0

已更改,编译并运行。有用!我简直不敢相信这是很简单的,当有人用一双新鲜的眼睛来看看时,它会有很大的帮助,我明显在这方面一直盯着太久:P 谢谢。 :) – user3155369