2016-02-08 1 views
1

S'il vous plaît avoir la patience de lire ma requête Merci :)événement d'action Bouton en java swing ne fonctionne pas? Et requêtes Code

Ce mon code ci-dessous qui doivent être générés sous forme graphique (en utilisant AWT Swing) Mon code le travail consiste à lire les fichiers texte d'un dossier et à obtenir des mots répétés et à les enregistrer dans un dossier spécifié. Il enregistre les fichiers .xls

import java.io.*; 
import java.nio.charset.Charset; 
import java.nio.charset.StandardCharsets; 
import java.nio.file.Files; 
import java.nio.file.Paths; 
import java.util.ArrayList; 
import java.util.Collections; 
import java.util.Comparator; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
import java.util.Set; 
import java.util.StringTokenizer; 
import java.util.Map.Entry; 
public class maxoccurrence2 { 
final static Charset ENCODING = StandardCharsets.UTF_8; 
public Map<String, Integer> getWordCount(String fileName) { 
FileInputStream fis = null; 
DataInputStream dis = null; 
BufferedReader br = null; 
Map<String, Integer> wordMap = new HashMap<String, Integer>(); 
try { 
fis = new FileInputStream(fileName); 
dis = new DataInputStream(fis); 
br = new BufferedReader(new InputStreamReader(dis)); 
String line = null; 
while ((line = br.readLine()) != null) { 
StringTokenizer st = new StringTokenizer(line, " "); 
while (st.hasMoreTokens()) { 
String tmp = st.nextToken().toLowerCase(); 
if (wordMap.containsKey(tmp)) { 
wordMap.put(tmp, wordMap.get(tmp) + 1); 
} else { 
    wordMap.put(tmp, 1); 
} 
} 
} 
} catch (FileNotFoundException e) { 
e.printStackTrace(); 
} catch (IOException e) { 
e.printStackTrace(); 
} finally { 
try { 
if (br != null) br.close(); 
} catch (Exception ex) { 
} 
} 
return wordMap; 
} 
public List<Entry<String, Integer>> sortByValue(Map<String, Integer> wordMap) { 
Set<Entry<String, Integer>> set = wordMap.entrySet(); 
List<Entry<String, Integer>> list = new ArrayList<Entry<String, Integer>>(set); 
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() { 
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) { 
return (o2.getValue()).compareTo(o1.getValue()); 
} 
}); 
return list; 
} 
public static void main(String a[]) throws IOException { 
String path = "E:\\testfolder\\"; 
String fileNameIn; 
File folder = new File(path); 
File[] listOfFiles = folder.listFiles(); 
for (int i = 0; i < listOfFiles.length; i++) { 
if (listOfFiles[i].isFile()) { 
fileNameIn = path + listOfFiles[i].getName(); 
maxoccurrence2 mdc = new maxoccurrence2(); 
Map<String, Integer> wordMap = mdc.getWordCount(fileNameIn); 
List<Entry<String, Integer>> list = mdc.sortByValue(wordMap); 
String fileNameOutput = path + "\\output\\"+   
listOfFiles[i] 
.getName() 
.substring(0, listOfFiles[i].getName().length() - 4)+ "output.csv"; 
try 
(BufferedWriter writer = Files .newBufferedWriter(Paths.get(fileNameOutput), ENCODING)) { 
    for (Map.Entry<String, Integer> entry : list) { 
    writer.write(entry.getKey() + " =" + entry.getValue()); 
    writer.newLine(); 
} 
} 
} } 
} 

De cette sortie de code:

ஒரு 10 Ceci est sortie mypresent.

Maintenant Nous devrions enregistrer au format Unicode du code à Excel. exemple de fichier de sortie (test.xls)

colonnes Excel intérieur,

pas nombre de mots série (colonnes statiques)

1 ஒரு 10

Comme cela, je avais besoin.

GUI (balançoire)

1)

Dans Source chemin il faut sélectionner un dossier ou des fichiers particuliers et les sélections doivent être affichées dans une zone de texte qui affiche la liste des fichiers sélectionnés et il devrait avoir une case à cocher "" Sélectionner tout "" et case à cocher pour les fichiers particuliers que nous allons sélectionner.

2) Dans le chemin de destination (un autre sélecteur Jfile), nous devrions définir le chemin de destination du dossier où les sorties sont générées.

Si nous générons les mêmes fichiers encore et encore dans cette destination, il faut PROMPT dire que « » si vous souhaitez remplacer ou enregistrer une autre copie ».

3) Si nous choisissons un dossier, le les fichiers qui sont dans le dossier doivent être affichés dans la zone de texte sous la forme de case à cocher

Et nous devrions montrer le nombre (pas de fichiers cochés) Donc, nous pouvons savoir ce que nous avons coché et générer uniquement les fichiers qui est nécessaire ou les fichiers entiers

Après la génération, nous devrions donner un message de confirmation que le processus est terminé.

Voici mon programme swing

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

import java.io.*; 

public class swingpgm3 extends Thread implements ActionListener 
{ 
JFrame f; 

JTextField tf,text1; 

JTextArea ta; 

JLabel lab1; 

String str; 

JScrollPane scrol; 
File fl; 
private JCheckBox chckbxSelectAll; 
private JTextField textField; 
private JLabel lblSourceFolderfiles; 
private JButton btnChoosedirectoryfrom; 
private JButton btnDisplay; 
private JLabel lblListFilesBelow; 

swingpgm3() 
{ 
f = new JFrame("Search box"); 
f.getContentPane().setLayout(null); 
f.setSize(820, 700); 

tf = new JTextField(); 
tf.setBounds(25, 50, 750, 40); 
tf.setFont(new Font("Latha", Font.BOLD, 20)); 
tf.setHorizontalAlignment(JTextField.CENTER); 
f.getContentPane().add(tf); 

ta = new JTextArea(); 
scrol = new JScrollPane(ta); 
ta.setFont(new Font("Latha", Font.BOLD, 20)); 
//JScrollPane.setPreferredSize(750,450); 
scrol.setBounds(25, 100, 750, 450); 

f.getContentPane().add(scrol); 

chckbxSelectAll = new JCheckBox("Select All"); 
chckbxSelectAll.setBounds(25, 557, 97, 23); 
f.getContentPane().add(chckbxSelectAll); 

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


    } 
}); 
btnGenerate.setBounds(316, 604, 89, 23); 
f.getContentPane().add(btnGenerate); 

textField = new JTextField(); 
textField.setBounds(268, 558, 86, 20); 
f.getContentPane().add(textField); 
textField.setColumns(10); 

JLabel lblNoOfFiles = new JLabel("NO of Files Selected"); 
lblNoOfFiles.setBounds(141, 561, 139, 14); 
f.getContentPane().add(lblNoOfFiles); 

JLabel lblDestinationFolderTo = new JLabel("Destination PathTo Generate Files"); 
lblDestinationFolderTo.setBounds(553, 561, 226, 14); 
f.getContentPane().add(lblDestinationFolderTo); 

JButton btnBrowse = new JButton("Browse"); 
btnBrowse.addActionListener(new ActionListener() { 

    public void actionPerformed(ActionEvent arg0) { 


    } 
}); 
btnBrowse.setBounds(553, 583, 89, 23); 
f.getContentPane().add(btnBrowse); 

lblSourceFolderfiles = new JLabel("Source Folder/ Files"); 
lblSourceFolderfiles.setBounds(6, 17, 138, 14); 
f.getContentPane().add(lblSourceFolderfiles); 

btnChoosedirectoryfrom = new JButton("ChooseDirectory From "); 
btnChoosedirectoryfrom.addActionListener(new ActionListener() { 


    public void actionPerformed(ActionEvent e) { 
      FileDialog fd = new FileDialog(f, "Open Box", FileDialog.LOAD); 
     btnChoosedirectoryfrom.addActionListener(this); 
    } 
}); 
btnChoosedirectoryfrom.setBounds(141, 9, 170, 30); 
f.getContentPane().add(btnChoosedirectoryfrom); 

btnDisplay = new JButton("Select To Display"); 
btnDisplay.setEnabled(false); 
btnDisplay.setBounds(534, 9, 180, 30); 
btnDisplay.addActionListener(this); 

f.getContentPane().add(btnDisplay); 

lblListFilesBelow = new JLabel("List files Below to choose "); 
lblListFilesBelow.setBounds(344, 17, 180, 14); 
f.getContentPane().add(lblListFilesBelow); 
f.setVisible(true); 
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 


} 

public void actionPerformed(ActionEvent ae) 
{ 
if (ae.getActionCommand().equals("ChooseDirectory From")) 
{ 
    FileDialog fd = new FileDialog(f, "Open Box", FileDialog.LOAD); 


    fd.setSize(300, 300); 
    fd.setVisible(true); 
    str = fd.getDirectory(); 

    if (str != null && !str.trim().equals("")) 
    { 
    tf.setText(str); 

    // Enable the search button 
    btnDisplay.setEnabled(true); 
    } 
    else 
    { 
     btnDisplay.setEnabled(false); 
    } 
} 

if (ae.getActionCommand().equals("btnDisplay")) 
{ 
    fl = new File(str); 
    File[] flist = fl.listFiles(); 

    for (int i = 0; i < flist.length; i++) 
    { 
    String newline = System.getProperty("line.separator"); 
    String nm = text1.getText(); 
    if (flist[i].getName().toLowerCase().endsWith(nm.toLowerCase())) 
    { 
     if (flist[i].isFile()) 
     { 
      ta.setText(ta.getText()+flist[i].getName() + newline); 

     } 
    } 
    } 
} 
} 

public static void main(String args[]) 
{ 
new swingpgm3(); 
} 
} 

Jusqu'à présent, je l'ai fait le cadre de l'interface graphique, Dans mon programme Swing « ChooseDirectory De » Ne pas ouvrir le navigateur de fichiers.

Avant Il ouvre et affiche les noms de fichier dans la zone de texte.

Can guide quiconque de cette étape

Je suis un débutant à Java Merci à l'avance.

Je joins mon application java image de sortie: output image

+0

Veuillez mettre en retrait votre code correctement. – user1803551

Répondre

1

Ceci est parce que vous avez déjà substituée la méthode réalisée d'action à la « ChooseDirectory De » à l'endroit que vous avez déclaré ce bouton, mais vous attendez à comportez-vous comme vous l'avez défini plus tard.

Modifier le code suivant:

btnChoosedirectoryfrom = new JButton("ChooseDirectory From"); 
btnChoosedirectoryfrom.addActionListener(new ActionListener() { 
public void actionPerformed(ActionEvent e) { 
    FileDialog fd = new FileDialog(f, "Open Box", FileDialog.LOAD); 
    btnChoosedirectoryfrom.addActionListener(this); 
} 
}); 

à

btnChoosedirectoryfrom = new JButton("ChooseDirectory From"); 
btnChoosedirectoryfrom.addActionListener(this); 

et cela devrait fonctionner. Notez également que votre bouton dispose d'un espace de fin supplémentaire alors que la commande equals dans la méthode actionperformed n'a pas cet espace supplémentaire. Vous devez supprimer cet espace supplémentaire.

+0

ya Cela a fonctionné et "sélectionner pour afficher" le bouton devrait afficher les fichiers dans la zone de texte! .Mais il n'apparaît pas maintenant !. –

+0

c'est parce que la condition que vous vérifiez est ae.getActionCommand(). Equals ("btnDisplay") .... mais le coomand d'action serait le nom du bouton "Select to Display" – justcurious

+0

Je l'ai fait aussi avant mais Exception dans le fil " AWT-EventQueue-0 "java.lang.NullPointerException \t à swingpgm3.actionPerformed (swingpgm3.java:141) erreur se produit –