2012-05-09 7 views
1

JFileChooserJListにファイルを追加しました。vectorを使用しています。私は、特定のファイルがJListで利用可能かどうかをチェックすることによって体系的にしようとしています。たとえば、 'abc.xml'という名前のファイルを追加すると、すぐにそのファイルがJListに存在するかどうかをチェックします。Javaでのファイルの複製

また、ファイルが1回だけ繰り返されるかどうか確認したいと思います。複数回繰り返される場合( 'abc.xml'、 'abc.xml'、...)、ファイルが複数回追加されたことを示すエラーメッセージが表示されます。

ここに完全なコードを掲載しています。

  public Test() 
{ 
    setTitle("EXAMPLE"); 
    getContentPane().setLayout(new MigLayout("", "[][][][][grow][][][][][][][] 
       [][][grow][grow][][][grow][][][][][][][grow]", "[][][][][][][][grow] 
       [grow][][][][][][][grow][]")); 

    final JFileChooser fileChooser = new JFileChooser(); 
    fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); 
    fileChooser.setMultiSelectionEnabled(true); 
    getContentPane().add(fileChooser, "cell 0 1 3 16"); 

    JScrollPane scrollPane = new JScrollPane(); 
    getContentPane().add(scrollPane, "cell 23 2 3 15,grow"); 

    vector = new Vector<File>(); 
    final JList list = new JList(vector); 
    scrollPane.setViewportView(list); 


    JButton btnNewButton = new JButton(" Add   "); 
    btnNewButton.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      for (File file : fileChooser.getSelectedFiles()) { 
         vector.addElement(file); 
       } 
       //System.out.println("Added..!!"); 
       list.updateUI(); 

      } 
    }); 
    getContentPane().add(btnNewButton, "cell 4 0"); 



    JButton btnNewButton_1 = new JButton(" Remove "); 
    btnNewButton_1.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      if(list.getSelectedIndices().length > 0) { 
        int[] selectedIndices = list.getSelectedIndices(); 
        for (int i = selectedIndices.length-1; i >=0; i--) { 
         vector.removeElementAt(i); 
        } 
        } 
        //System.out.println("Removed..!!"); 
        list.updateUI(); 

     } 
     }); 
    getContentPane().add(btnNewButton_1, "cell 4 2"); 

    JButton btnNewButton_2 = new JButton(" Check  "); 
    btnNewButton_2.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 

      ***File file = fileChooser.getSelectedFile(); 
      boolean found = false; 
      for (File f : vector) { 
       if (file.getName().equals(f.getName())) { 
        found = true; 
        break; 
       } 
      } 
      if (!found) { 
       vector.add(file); 
       fireIntervalAdded(this, vector.size()-1, vector.size()-1); 
      } else { 
       // Abusive usage of an exception 
       JOptionPane.showMessageDialog(null, "File " + file.getName() + " 
       already added"); 

      }*** 
     }); 

      public static void main(String args[]) {   
      // Create an instance of the test application   
      Test mainFrame = new Test();   
      mainFrame.pack();   
      mainFrame.setVisible(true);  
    } 

私が得るのは、ファイルが1回だけ出現してもファイルがすでに追加されていることを示すmsgボックスです。

ファイルが一度追加されると、何も表示されません。しかし、それが複数回追加された場合にのみ、そのファイルがすでに追加されていることを示すmsgが表示されます。

誰かが助けることができますか?

+3

aaaaah!ホラーの(コードの書式設定)! – andersoj

+0

あなたのやりたいことの近くでコードが見えませんか?読みやすくするためにフォーマットできますか? – maress

+0

コード全体を投稿しますか?もしそうなら、私はそれをすることができます。 – dmurali

答えて

0
vector.contains(fileName) 

最初に開始しますか?

3

[OK]をクリックします。ここでは、説明する例を示します。私は、ファイルを追加することを拒否する条件が何であるかについてはあまりよく分かりません。これは名前に基づいていますが、最初にgetCanonicalFile()を使用してFile.equals()を探しているのではないかと思います。私はコードのコメントでもそれを示しました。

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.File; 
import java.util.Vector; 

import javax.swing.AbstractListModel; 
import javax.swing.JButton; 
import javax.swing.JFileChooser; 
import javax.swing.JFrame; 
import javax.swing.JList; 
import javax.swing.JOptionPane; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.SwingUtilities; 

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

      @Override 
      public void run() { 
       initUI(); 
      } 
     }); 
    } 

    public static class MyListModel extends AbstractListModel { 

     private Vector<File> files = new Vector<File>(); 

     public void addFilesToModel(File[] f) { 
      for (File file : f) { 
       addFileToModel(file); 
      } 
     } 

     public void addFileToModel(File file) throws IllegalArgumentException { 
      boolean found = false; 
      // file = file.getCanonicalFile(); 
      for (File file2 : files) { 
       // file2.getCanonicalFile().equals(file) + throw IOException 
       if (file2.getName().equals(file.getName())) { 
        found = true; 
        break; 
       } 
      } 
      if (!found) { 
       files.add(file); 
       fireIntervalAdded(this, files.size() - 1, files.size() - 1); 
      } else { 
       // Abusive usage of an exception 
       throw new IllegalArgumentException("File " + file.getName() + " already added"); 
      } 
     } 

     @Override 
     public int getSize() { 
      return files.size(); 
     } 

     @Override 
     public Object getElementAt(int index) { 
      return files.get(index); 
     } 

    } 

    private static File lastFolder; 

    protected static void initUI() { 
     JFrame frame = new JFrame("test"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JPanel panel = new JPanel(); 
     final MyListModel model = new MyListModel(); 
     JList list = new JList(model); 
     final JButton button = new JButton("Add files..."); 
     button.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       JFileChooser chooser = new JFileChooser(); 
       if (lastFolder != null) { 
        chooser.setCurrentDirectory(lastFolder); 
       } 
       chooser.setMultiSelectionEnabled(true); 
       chooser.showDialog(button, "Add files"); 
       if (chooser.getSelectedFiles() != null) { 
        for (File file : chooser.getSelectedFiles()) { 
         try { 
          model.addFileToModel(file); 
         } catch (IllegalArgumentException e1) { 
          JOptionPane.showMessageDialog(button, e1.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); 
         } 
        } 
        lastFolder = chooser.getCurrentDirectory(); 
       } 
      } 
     }); 
     panel.add(new JScrollPane(list)); 
     panel.add(button); 
     frame.add(panel); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
} 

EDIT


あなたのコードが不完全であったという事実のほかに、私はそれを整理し、それを動作させるために管理が、それは本当に遠い完璧からです。追加のライブラリが必要なので、MigLayoutも取り除きました。それを元に戻してください。

import java.awt.Component; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.File; 
import java.util.Vector; 

import javax.swing.AbstractListModel; 
import javax.swing.JButton; 
import javax.swing.JFileChooser; 
import javax.swing.JFrame; 
import javax.swing.JList; 
import javax.swing.JOptionPane; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.SwingUtilities; 

public class Test extends JFrame { 

    Vector<File> vector; 
    JPanel root; 
    private MyListModel model; 

    public class MyListModel extends AbstractListModel { 

     public void addFilesToModel(File[] f) { 
      for (File file : f) { 
       addFileToModel(file); 
      } 
     } 

     public void addFileToModel(File file) throws IllegalArgumentException { 
      boolean found = false; 
      // file = file.getCanonicalFile(); 
      for (File file2 : vector) { 
       // file2.getCanonicalFile().equals(file) + throw IOException 
       if (file2.getName().equals(file.getName())) { 
        found = true; 
        break; 
       } 
      } 
      if (!found) { 
       vector.add(file); 
       fireIntervalAdded(this, vector.size() - 1, vector.size() - 1); 
      } else { 
       // Abusive usage of an exception 
       throw new IllegalArgumentException("File " + file.getName() + " already added"); 
      } 
     } 

     public void removeFileFromModel(File file) throws IllegalArgumentException { 
      int index = vector.indexOf(file); 
      File removed = vector.remove(index); 
      if (removed != null) { 
       fireIntervalRemoved(this, index, index); 
      } else { 
       // Nothing was removed 
      } 
     } 

     public void removeFilesFromModel(File[] files) { 
      for (File f : files) { 
       removeFileFromModel(f); 
      } 
     } 

     @Override 
     public int getSize() { 
      return vector.size(); 
     } 

     @Override 
     public Object getElementAt(int index) { 
      return vector.get(index); 
     } 

    } 

    public Test() { 
     super("EXAMPLE"); 
     root = new JPanel(new GridBagLayout()); 
     vector = new Vector<File>(); 
     GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.gridheight = 2; 
     getContentPane().add(root); 
     final JFileChooser fileChooser = new JFileChooser(); 
     fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); 
     fileChooser.setMultiSelectionEnabled(true); 
     root.add(fileChooser, gbc); 
     gbc.weightx = 1.0; 
     gbc.weighty = 1.0; 
     gbc.fill = GridBagConstraints.BOTH; 
     gbc.ipadx = 5; 
     gbc.ipady = 5; 
     gbc.gridheight = 1; 
     gbc.gridwidth = 3; 
     gbc.gridx = 1; 

     vector = new Vector<File>(); 
     model = new MyListModel(); 
     final JList list = new JList(model); 
     JScrollPane scrollPane = new JScrollPane(list); 
     root.add(scrollPane, gbc); 
     gbc.gridwidth = 1; 
     gbc.weightx = 0; 
     gbc.weighty = 0; 
     gbc.anchor = GridBagConstraints.CENTER; 
     final JButton btnNewButton = new JButton("Add"); 
     btnNewButton.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       for (File file : fileChooser.getSelectedFiles()) { 
        try { 
         model.addFileToModel(file); 
        } catch (IllegalArgumentException e1) { 
         showError(btnNewButton, file); 
        } 
       } 
      } 
     }); 
     gbc.gridy = 1; 
     root.add(btnNewButton, gbc); 

     JButton btnNewButton_1 = new JButton("Remove"); 
     btnNewButton_1.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       if (list.getSelectedIndices().length > 0) { 
        for (Object file : list.getSelectedValues()) { 
         model.removeFileFromModel((File) file); 
        } 
       } 
      } 
     }); 
     gbc.gridx++; 
     root.add(btnNewButton_1, gbc); 

     final JButton btnNewButton_2 = new JButton("Check"); 
     btnNewButton_2.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 

       File file = fileChooser.getSelectedFile(); 
       boolean found = false; 
       for (File f : vector) { 
        if (file.getName().equals(f.getName())) { 
         found = true; 
         break; 
        } 
       } 
       if (found) { 
        showError(btnNewButton_2, file); 
       } else { 
        JOptionPane.showMessageDialog(btnNewButton_2, "File " + file.getAbsolutePath() + " is not in the list yet"); 
       } 
      } 

     }); 
     gbc.gridx++; 
     root.add(btnNewButton_2, gbc); 
    } 

    private void showError(Component parent, File file) { 
     JOptionPane.showMessageDialog(parent, "File " + file.getName() + " already added"); 
    } 

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

      @Override 
      public void run() { 
       Test mainFrame = new Test(); 
       mainFrame.pack(); 
       mainFrame.setVisible(true); 
      } 
     }); 
    } 
} 
+0

ありがとうございました。しかし、今、私は自分が与えたものと私が得たものを示すように自分のコードを修正しました。もしあなたが手伝ってくれれば幸いです。 – dmurali

+0

@dmurali 1) '' boolean abcExists = vector.contains(file); '2)なぜあなたは" abc.txt "をハードコーディングし続けますか?私はあなたがリストにファイルを追加したいが、それが2回追加されていないことを確認したいと思った。あなたのコードは "abc.txt"という名前のファイルが追加されるのを防ぎます。 3)名前に基づいてファイルを比較するだけでいいですか、 'C:\ tmp.log'と' C:\ foo \ tmp.log'を追加する必要がありますか? –

+0

名前を使ってファイルを比較したいと思います。例えば; C:\ tmp.log = C:\ foo \ tmp。ファイルがまだ同じであるため、ログは同じです – dmurali

関連する問題