JButton不执行任何操作

时间:2012-08-23 15:28:36

标签: java swing jtable jbutton actionlistener

您好JButton定义如下:

private JButton btnExp;

private JPanel jpShow = new JPanel();
jpShow.setLayout(null);

btnExp = new JButton("Export");
btnExp.setBounds(100, 250, 120, 25);

jpShow.add(jspTable);
jpShow.add(btnExp);
//Adding Panel to Window.
getContentPane().add(jpShow);

public void actionPerformed(ActionEvent ae) {
    try{
        Object obj = ae.getSource();
        if (obj == btnExp) {
            FileWriter excel = new FileWriter("File.TSV");

            for(int i = 0; i < dtmCustomer.getColumnCount(); i++){
                excel.write(dtmCustomer.getColumnName(i) + "\t");
            }
            excel.write("\n");

            for(int i=0; i< dtmCustomer.getRowCount(); i++) {
                for(int j=0; j < dtmCustomer.getColumnCount(); j++) {
                    excel.write(dtmCustomer.getValueAt(i,j).toString()+"\t");
                }
                excel.write("\n");
            }
            excel.close();
            JOptionPane.showMessageDialog(this, "File Written","Success", JOptionPane.PLAIN_MESSAGE);
        }
    }catch(Exception e){
        System.out.println(e);
    }
}

我试图在用户点击按钮后导出JTable,但没有任何反应,也没有引发异常。我这样做是错误的吗?

2 个答案:

答案 0 :(得分:3)

您没有正确地将ActionListener添加到按钮中。正确的方法是:

btnExp.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
    // add here the contents in your actionPerformed method
  }
})

答案 1 :(得分:2)

  1. 您发布的代码甚至不会编译
  2. 您应该将ActionListener添加到JButton,因为@Dan已在答案中显示
  3. 您应该确保关闭FileWriter区块中的finally。现在,当发生异常时,它将不会被关闭
  4. 如果您在事件调度线程上导出表格,您将得到一个无响应的用户界面。考虑使用SwingWorker。有关更多信息,请参阅Concurrency in Swing教程
  5. 避免使用setLayout( null )setBounds。使用合适的LayoutManager代替