2012-06-25 129 views
1

我有一個重命名工具,它設置了一個文件夾目錄,但是我創建了一些JCheckBox,我希望它們能夠根據所選的目錄來更改目錄。設置目錄與動作監聽器

她是複選框的動作偵聽器,它編輯txt字段,使其看起來正確的程序,但實際上並沒有改變目錄。

cbxBlackBerry = new JCheckBox("BlackBerry"); 
     cbxBlackBerry.addActionListener(
       new ActionListener(){ 
        public void actionPerformed(ActionEvent e){ 
          if(cbxBlackBerry.isSelected()) 
          txtPrefix.setText("x-rimdevice_"); 
         else{ 
          txtPrefix.setText(""); 
         } 

         if(cbxBlackBerry.isSelected()) 
          txtDirectory.setText("\\RSASoftToken\\blackberry"); 
         else{ 
          txtDirectory.setText(""); 
         } 
        } 
       } 
      ); //close addActionListener 

這是命令目錄設置

private boolean chooseDirectory(){ 

     /* Choose the file Directory 
     * this will ensure that the class variable directory get the value 
     * only when a directory is chosen, then the button Ok will be enabled 
     */ 

     JFileChooser fc = new JFileChooser(); 
     fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
     fc.setAcceptAllFileFilterUsed(false); 

     int returnval = fc.showOpenDialog(this); 

     if(returnval == JFileChooser.APPROVE_OPTION){ 
      directory = fc.getSelectedFile(); 
      btnOk.setEnabled(true); 
      return true;   
     } 

     return false; 
    }// end chooseDirectory 

如何修改這個代碼,以實際更改目錄的代碼?

if(cbxBlackBerry.isSelected()) 
          txtDirectory.setText("\\RSASoftToken\\blackberry"); 
         else{ 
          txtDirectory.setText(""); 

回答

1

你需要一個方法是這樣的:

private void setDirectory(File dir) { 
    directory = dir; 
    txtDirectory.setText(dir.getAbsolutePath()); 
} 

,並在那裏你有一些代碼設置目錄的JTextField,而不是調用此方法。因此,例如,而不是

if(cbxBlackBerry.isSelected()) 
    txtDirectory.setText("\\RSASoftToken\\blackberry"); 
else{ 
    txtDirectory.setText(""); 
} 

做這樣的事情:

String dirPath = ""; 
if (cbxBlackBerry.isSelected()) 
    dirPath = BLACKBERRY_PATH; // a constant 
else { 
    dirPath = ""; 
} 
setDirectory(new File(dirPath)); 

,並在類的頂部,有一個恆定的,如果需要的話:

private static final String BLACKBERRY_PATH = "\\RSASoftToken\\blackberry"; 
+0

你真棒,完美的工作 – jerhynsoen

+0

@jerhynsoen:不客氣 - 很高興它幫助。 –

1

您將使用ChangeListener

import javax.swing.JCheckBox; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.event.ChangeEvent; 
import javax.swing.event.ChangeListener; 

public class JCheckboxApp { 
    public static void main(String args[]) { 
    JFrame frame = new JFrame("CheckBox Example"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    JCheckBox cbxBlackBerry = new JCheckBox("BlackBerry"); 
    final JTextField txtPrefix = new JTextField("textPrefix"); 
    final JTextField txtDirectory = new JTextField("txtDirectory"); 
    cbxBlackBerry.addChangeListener(new ChangeListener() { 
     public void stateChanged(ChangeEvent changeEvent) { 
      JCheckBox source = (JCheckBox) changeEvent.getSource(); 
      if (source.isSelected()) { 
       txtPrefix.setText("x-rimdevice_"); 
       txtDirectory.setText("\\RSASoftToken\\blackberry"); 
      } else { 
       txtPrefix.setText(""); 
       txtDirectory.setText(""); 
      } 
     } 
    }); 

    JPanel p = new JPanel(); 
    p.add(txtPrefix); 
    p.add(txtDirectory); 
    p.add(cbxBlackBerry); 
    frame.add(p); 
    frame.setSize(300, 100); 
    frame.setVisible(true); 
    } 
} 
+0

太棒了!現在怎麼辦?你可以給我一個例子嗎? – jerhynsoen