JButton和actionPerformed方法是否可能在不同的文件中?

时间:2013-04-09 08:30:23

标签: java swing button actionlistener

是否可以在一个文件上使用一个按钮,在另一个文件中使用actionPerformed(ActionEvent e)方法?我试图将一个actionListener添加到一个按钮,select1位于文件trialdump.java中,但actionPerformed(ActionEvent e)方法位于文件listen.java中。我尝试扩展公共类trialdump扩展listen但它显示错误。知道如何将方法添加到按钮?感谢。

这是我的文件trialdump.java中的代码:

package Core;

import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.*;
import java.awt.*;

// Create a simple GUI window
public class trialdump {

private static void createWindow() {

    // Create and set up the window.
    JFrame frame = new JFrame("PDF Denoiser");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    // My edit
    JPanel panel = new JPanel();
    GroupLayout layout = new GroupLayout(panel);
    panel.setLayout(layout);

    layout.setAutoCreateGaps(true);
    layout.setAutoCreateContainerGaps(true);

    JLabel label1 = new JLabel("Image File");
    JLabel label2 = new JLabel("Destination");
    JLabel label3 = new JLabel("Preview");

    JTextField current = new JTextField();
    JTextField dest = new JTextField();
    JTextArea preview = new JTextArea();

    preview.setEditable(false);
    JScrollPane previewScrollPane = new JScrollPane(preview);

    JButton choose1 = new JButton("Search1");
    JButton choose2 = new JButton("Search2");
    JButton algo1 = new JButton("MDWM");
    JButton algo2 = new JButton("BFMR");
    JButton algo3 = new JButton("Mine");



    // Horizontal arrangement
    layout.setHorizontalGroup(layout
            .createSequentialGroup()
            .addGroup(
                    layout.createParallelGroup(GroupLayout.Alignment.LEADING).addComponent(label1)
                            .addComponent(label2).addComponent(label3))
            .addGroup(
                    layout.createParallelGroup(GroupLayout.Alignment.LEADING).addComponent(current)
                            .addComponent(dest).addComponent(preview))
            .addGroup(
                    layout.createParallelGroup(GroupLayout.Alignment.LEADING).addComponent(choose1)
                            .addComponent(choose2).addComponent(algo1).addComponent(algo2).addComponent(algo3)));

    layout.linkSize(SwingConstants.HORIZONTAL, choose1, choose2, algo1, algo2, algo3);

    // Vertical arrangement
    layout.setVerticalGroup(layout
            .createSequentialGroup()
            .addGroup(
                    layout.createParallelGroup(GroupLayout.Alignment.BASELINE).addComponent(label1)
                            .addComponent(current).addComponent(choose1))
            .addGroup(
                    layout.createParallelGroup(GroupLayout.Alignment.BASELINE).addComponent(label2)
                            .addComponent(dest).addComponent(choose2))
            .addGroup(
                    layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                            .addComponent(label3)
                            .addComponent(preview)
                            .addGroup(
                                    layout.createSequentialGroup().addComponent(algo1).addComponent(algo2)
                                            .addComponent(algo3))));

    // Display the window.
    frame.setLocationRelativeTo(null);
    frame.add(panel);
    frame.pack();
    frame.setVisible(true);
}

public static void main(String[] args) {

    createWindow();

}
}

这是我在listen.java中的代码:

package components;

import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.SwingUtilities;
import javax.swing.filechooser.*;

public class listen extends JPanel implements ActionListener{

static private String newline = "\n";
private JTextArea log;
private JFileChooser fc;

public listen() {



}

public void actionPerformed(ActionEvent e) {
    //Set up the file chooser.
    if (fc == null) {
        fc = new JFileChooser();

    //Add a custom file filter and disable the default
    //(Accept All) file filter.
        fc.addChoosableFileFilter(new imagefilter());
        fc.setAcceptAllFileFilterUsed(false);

    //Add custom icons for file types.
        fc.setFileView(new imagefileview());

    //Add the preview pane.
        fc.setAccessory(new imagepreview(fc));
    }

    //Show it.
    int returnVal = fc.showDialog(listen.this,
                                  "Attach");

    //Process the results.
    if (returnVal == JFileChooser.APPROVE_OPTION) {
        File file = fc.getSelectedFile();

    } else {
        log.append("Attachment cancelled by user." + newline);
    }
    log.setCaretPosition(log.getDocument().getLength());

    //Reset the file chooser for the next time it's shown.
    fc.setSelectedFile(null);
}

/**
 * Create the GUI and show it.  For thread safety,
 * this method should be invoked from the
 * event dispatch thread.
 */


public static void main(String[] args) {
    //Schedule a job for the event dispatch thread:
    //creating and showing this application's GUI.
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            //Turn off metal's use of bold fonts
            UIManager.put("swing.boldMetal", Boolean.FALSE);

        }
    });
}
}

3 个答案:

答案 0 :(得分:2)

您可以添加在另一个类中定义的侦听器,执行类似这样的操作

JButton choose1 = new JButton("Search1");
choose1.addActionListener(new listen());
顺便说一下,你应该处理一些代码:

  • 应使用首字母大写
  • 在CamelCase中键入类名称
  • 为您的包使用正确的名称
  • 我不认为监听器类中的主要方法是使任何有用的东西
  • 根本不需要在侦听器类
  • 中扩展JPanel
  • 尽量避免使用make empty构造函数,就像在listen()中一样。至少调用super(),或者只是,不要包含它。

答案 1 :(得分:1)

只是示例代码,您可以在类似的行上进行更改 -

class Some extends JFrame {

    private JButton button = new JButton("Something");

    Some() {
        button.addActionListener(new MyListener());
    }
}

class MyListener implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
        // do something
    }    
}

答案 2 :(得分:1)

这样做的正确方法是扩展AbstractAction类,将所有操作代码添加到actionPerformed方法中,然后将新实例传递给JButton's构造函数或致电setAction上的JButton

这是一个link来帮助您清除所有内容。