swing java中的按钮动作事件不起作用?和代码查询

时间:2016-02-08 06:45:20

标签: java swing

请耐心阅读我的查询谢谢:)

下面我的代码必须以GUI形式生成(使用Swing 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(swing)

1)

在源路径中 - 我们应该选择任何文件夹或特定文件 并应显示这些选择 在textarea 它显示了所选文件的列表,它应该有一个复选框&#34;&#34;选择全部&#34;&#34; 和 我们要选择的特定文件的复选框。

2) 在目标路径(另一个Jfile选择器)中,我们应该设置生成输出的文件夹目标路径。

如果我们在该目的地一次又一次地生成相同的文件, 它应该提示说&#34;&#34;是否覆盖或保存为另一个副本&#34;。

3) 如果我们选择一个文件夹,文件夹内的文件应以复选框的形式显示在textarea中。

我们应该显示计数(没有标记的文件)。 因此,我们可以知道我们勾选的内容并仅生成所需的文件或整个文件。

在生成之后,我们应该确认该过程已完成。

这是我的挥杆计划

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框架, 在我的Swing计划&#34; ChooseDirectory From&#34; 不打开文件浏览器。

在它打开并在文本区域中显示文件名之前。

任何人都可以从这一步指导

我是java的初学者 在此先感谢。

我附加了我的java应用程序输出图像: output image

1 个答案:

答案 0 :(得分:1)

这是因为您已经在已声明此按钮的位置覆盖了“ChooseDirectory From”中的动作执行方法,但您希望它的行为与您稍后定义的方式相同。

更改以下代码:

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

它应该有效。另请注意,您的按钮末尾有额外的尾随空格,而actionperformed方法中的equals命令没有这个额外的空间,您的检查会失败。你需要删除这个额外的空间。