2012-06-25 2 views
1

У меня есть инструмент переименования, который устанавливает каталог папок, однако я создал некоторый JCheckBox, и я хочу, чтобы они могли изменять каталог в зависимости от выбранного.set directory with action listener

Она является исполнителем действий для этого флажка, он редактирует поле 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