2016-02-08 81 views
1

請有耐心看完我的查詢謝謝:)按鈕動作事件不工作?和代碼查詢

這是我下面的代碼在GUI形式來產生(使用擺動AWT) 我的代碼工作是從文件夾中讀取文本文件,並重復計算字數並將其保存到指定的文件夾中。 將文件保存爲.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(); 
} 
} 
} } 
} 

從這個代碼的輸出:

ஒரு10這是mypresent輸出。

現在我們應該將Unicode格式從代碼保存到excel。 輸出文件的例子(TEST.XLS)

內部Excel列,

序列號字計數(靜態列)

1ஒரு10

喜歡我需要的。

IN GUI(擺動)

1)

在源路徑-我們應該選擇的任何文件夾或特定文件 和這些選擇應該在一個textarea 示出選擇的文件的列表中顯示 和它應該有一個複選框「」全選「」 和 複選框,用於我們要選擇的特定文件。

2) 在目標路徑(另一個Jfile選擇器)中,我們應該設置生成輸出的文件夾目標路徑。

如果我們在目的地連連產生相同的文件, 應該提示說「」是否覆蓋或者另存爲另一個副本」。

3) 如果我們選擇一個文件夾中,這是該文件夾中的文件應在複選框的形式顯示在文本區域。

我們應該顯示計數(無文件打勾)。 因此,我們可以知道我們選中並生成這些文件,這是需要或整個文件。

生成後,我們應該給出確認過程完成的消息。

這裏是我的揮杆程序

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(); 
} 
} 

到目前爲止,我已經做了GUI框架, 在我的揮杆節目「ChooseDirectory從」 不打開文件瀏覽器。

之前它確實打開並顯示文本區域中的文件名稱。

可以從這個步驟

我是一個初學者到Java提前 感謝任何人指導。

我重視我的Java應用程序輸出的圖像: output image

+0

請妥善縮進代碼。 – user1803551

回答

1

這是因爲你已經覆蓋在執行的行動方法「ChooseDirectory從」的地方,你都宣稱這個按鈕,但你也期待按照你以後定義的方式行事。

更改下面的代碼:

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); 

,它應該工作。另外請注意,您的按鈕在年底有額外的尾隨空間而equals在actionPerformed方法命令沒有這個額外的空間你該檢查將失敗。你需要刪除這個額外的空間。

+0

雅它的工作和「選擇顯示」按鈕應該在文本區域顯示文件!。但現在出現犯規! –

+0

那是因爲你正在檢查的條件是ae.getActionCommand()。等於(「btnDisplay」)......但動作coomand將按鈕的名稱,即「選擇顯示」 – justcurious

+0

我這樣做太之前,但異常的線程「 AWT-EventQueue的-0" 顯示java.lang.NullPointerException \t在swingpgm3.actionPerformed(swingpgm3.java:141)發生錯誤 –